Моя компания использует Twilio Flex в качестве нашей телефонной системы, и недавно мне поручили настроить функцию, которая позволит нам редактировать голосовое сообщение TwiML, которое воспроизводится перед нашим обычным голосовым сообщением. Это сообщение TwiML будет изменено с помощью бота Twilio, который я опубликовал в наших командах Microsoft.
Причина этого в том, что наша служба поддержки может добавить короткое сообщение в строки «В настоящее время у нас возникают проблемы с X» перед нашим обычным сообщением «Добро пожаловать в службу поддержки [Компания]».
Если TwiML можно редактировать с помощью HTTP POST/PUT или API Twilio, это должно быть тривиальным вопросом, но пока я не смог понять, как это сделать.
Я не смог найти никаких упоминаний об этом в документ API, поэтому решил, что лучше всего использовать HTTP POST. Используя это как отправную точку, я могу получить свой TwiML с помощью HTTP GET:
const axios = require('axios');
const crypto = require('crypto');
const accountSidFlex = process.env.accountSidFlex;
const authTokenFlex = process.env.authTokenFlex;
var URL = 'https://handler.twilio.com/twiml/EHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + '?AccountSid=' + accountSidFlex
var twilioSig = crypto.createHmac('sha1', authTokenFlex).update(new Buffer(URL, 'utf-8')).digest('Base64')
var config = {
headers:{
'X-TWILIO-SIGNATURE': twilioSig
}
}
axios.get(
URL,config
).catch(error => console.info(error))
.then(response => {
console.info(response.data)
})
response.data показывает текущий XML-контент TwiML.
Мои попытки POST дают только тот же результат, что и GET, а PUT дает 405 Method Not Allowed.
var URL = 'https://handler.twilio.com/twiml/EHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + '?AccountSid=' + accountSidFlex
var twilioSig = crypto.createHmac('sha1', authTokenFlex).update(new Buffer(URL, 'utf-8')).digest('Base64')
var config = {
headers:{
'X-TWILIO-SIGNATURE': twilioSig,
'Content-Type': 'text/xml'
}
}
var xml =
'<?xml version = "1.0" encoding = "UTF-8"?>\
<Response><Play digits = "www"/>\
<Say voice = "alice">"We are currently experiencing X related issues". </Say>\
</Response>';
axios.post(
URL,xml,config
)
.catch(error => console.info(error))
.then(response => {
console.info(response.data)
})
В идеале я хотел бы иметь возможность изменять конкретный TwiML с помощью методов HTTP или Twilio-API, чтобы мы могли использовать его в потоке Studio Flow. Мы просто будем молчать до тех пор, пока нам не понадобится что-то добавить, и вернемся к молчанию, как только проблемы исчезнут.
Любая помощь будет оценена по достоинству!
В настоящее время вы не можете программно изменить содержимое TwiML Bins, Studio Flows или Twilio Functions. Я считаю, что ключевая функциональность, которую вы ищете, — это способ динамического обновления обмена сообщениями (Say/Play Widget) в потоке Studio на основе некоторых условий.
Один из способов — использовать виджет функций для извлечения документа Twilio Sync для сообщения, возврата сообщения в виде JSON и воспроизведения этого сообщения виджетом Say/Play. Вы можете найти примеры REST API синхронизации Twilio для добавления, изменения и извлечения в соответствующем документе.
Вы можете получить проанализированный ответ, используя описанный здесь синтаксис переменных, https://www.twilio.com/docs/studio/widget-library#run-функция.