- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Twilio/node.js 上设置了一个基本工作流程,它将来电转移到客服人员的电话上。因为代理可能在他们的电话/手机上设置了语音邮件,所以我想通过“收集”指令提示他们接受。如果他们按 1,则调用将被转接(“出队”指令)。否则,预订将被拒绝。
我的问题是我不知道如何订购指令:如果我在排队之前收集,那么收集似乎还不知道“要问谁”。但如果在集合前入队,那么调用者(传入客户端)会听到提示消息,此时拒绝预订就来不及了...
最佳答案
这里是 Twilio 开发者布道者。
在这种情况下,您不应使用“出队”来响应分配回调。相反,你应该 use the "call" instruction to initiate a call改为代理。
在调用指令中,您可以包含一个 URL,当调用连接到代理时将请求该 URL。此时您应该读出您的消息并使用 <Gather>
确保座席已准备好接听电话。当客服人员按下按钮或<Gather>
时超时,action
<Gather>
的属性将被要求。然后,如果您发现用户确实输入了数字,请检查 Digits
parameter您可以使用 TwiML 回复 <Dial>
<Queue>
。为了调用预订所指的实际来电者,您需要添加 reservationSid
attribute到<Queue>
元素。您将收到 ReservationSid
as a parameter in the task assignment webhook 。当调用桥接时,它将接受预订。
如果<Gather>
超时,那么您应该拒绝预订,并将其传递给下一个工作人员。
请告诉我这是否有帮助。
编辑
针对这种情况的 TwiML 示例。
您首先使用调用指令以 JSON 响应分配回调:
{
"instruction": "call",
"to": AGENT_PHONE_NUMBER,
"from": YOUR_TWILIO_NUMBER,
"url": "https://example.com/worker_call?ReservationSid=${req.body.ReservationSid}&TaskSid=${req.body.TaskSid}"
}
注意,我添加了 ReservationSid
和TaskSid
从传入请求到工作人员接听电话时调用的 Webhook 的 URL。
然后,当工作人员接听电话时,Twilio 会调用 url
我们在上面进行了设置,并用它来询问他们是否愿意接听电话。
# /worker_call
<Response>
<Gather action="/gather_result?ReservationSid=${req.query.ReservationSid}&TaskSid=${req.query.TaskSid}" numDigits="1">
<Say voice="alice">You have an incoming call, dial any number to accept</Say>
</Gather>
<Redirect>/gather_result?ReservationSid=${req.query.ReservationSid}&TaskSid=${req.query.TaskSid}</Redirect>
</Response>
注意,我正在传递 ReservationSid
和TaskSid
从传入请求 URL 到 <Gather>
的 URL行动。现在,当调用操作 URL 时,我们需要根据调用是否被接受进行响应。我需要为此使用一些实际代码,而不仅仅是 TwiML,因此我将使用 Node.js 来完成此操作。我们需要能够调用 REST API 中的预订资源,因此需要进行一些设置:
const accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const authToken = 'your_auth_token';
const workspaceSid = 'WSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const twilio = require('twilio')
const client = twilio(accountSid, authToken);
app.post('/gather_result', function(req, res) {
const twiml = new twilio.twiml.VoiceResponse();
if (req.body.Digits && req.body.Digits.length > 0) {
// There was a positive result, call the Queue and connect the caller
const dial = twiml.dial();
dial.queue({queue: req.query.ReservationSid});
res.send(twiml.toString());
} else {
// no response, reject the reservation.
client.taskrouter.v1
.workspaces(workspaceSid)
.tasks(req.query.TaskSid)
.reservations(req.query.ReservationSid)
.update({ reservationStatus: 'rejected' })
.then(function() {
// once the reservation is updated, then hangup the call.
twiml.hangup();
res.send(twiml.toString());
});
}
});
关于node.js - 在使来电出队之前提示客服人员接受,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42638021/
我的 JavaScript 代码中有一道数学题。我需要将给定数量的玩家随机分成 2 队,这样每次 - 如果玩家想再次比赛 - 团队都会重新组成,并且在形成所有组合之前他们应该不同。 假设我有 4 个玩
我是一名优秀的程序员,十分优秀!