![[Twilio+Zendesk] Twilio に SIP 接続して Zendesk のチケットを作成する](https://devio2024-media.developers.io/image/upload/v1743493252/user-gen-eyecatch/lgq72rg1zqhqqethqpf0.png)
[Twilio+Zendesk] Twilio に SIP 接続して Zendesk のチケットを作成する
対象読者
- LINE コール Plus などの SIP 接続で Zendesk API にアクセスしたい人
- Twilio + Zendesk 連携の実装例に興味がある人
- Twilio の音声認識機能の応用例に興味がある人
概要
この記事では、 Twilio が SIP 接続で受け取った音声の内容を認識し、 Zendesk チケット化する方法について解説します。
全体としては次のような流れになります。
- Twilio コンソールの Functions で Zendesk API をコールする実装を作成する
- Twilio コンソールの Studio で SIP 音声を文字起こしする Flow を実装する
- Twilio コンソールの Voice SIP Domains で Domain を作成する
SIP 接続とは
SIP(Session Initiation Protocol)
は、インターネット上で音声通話を行うための通信プロトコルです。LINE コール Plus などの VoIP サービスは、SIP を使って通話を制御します。
Twilio とは
Twilio
は、音声通話・SMS・チャットなどの通信機能を API 経由で提供するクラウドサービスです。GUI で通話フローを構築できる Studio や、サーバーレス実行環境の Functions などが利用できます。
Zendesk とは
Zendesk
は、カスタマーサポート向けのクラウド型 CRM プラットフォームです。API を通じてチケットの作成や更新が可能で、Twilio との連携により通話内容をサポートチケットとして記録できます。
Function の作成
Twilio コンソール の Functions にアクセスします。 Service を任意の名前で作成し、エディタの画面に遷移したら Create your function
をクリックします。
Function 名は任意のもので構いません。 function を作成したら、次の内容を入力し、 Save をクリックして保存します。
const axios = require('axios');
exports.handler = async function(context, event, callback) {
const transcript = event.SpeechResult || "(音声認識結果なし)";
const from = event.From;
const to = event.To;
const zendeskDomain = context.ZENDESK_DOMAIN;
const zendeskEmail = context.ZENDESK_EMAIL;
const zendeskToken = context.ZENDESK_API_TOKEN;
const auth = Buffer.from(`${zendeskEmail}/token:${zendeskToken}`).toString('base64');
try {
await axios.post(
`https://${zendeskDomain}/api/v2/tickets.json`,
{
ticket: {
subject: "音声入力による問い合わせ",
comment: {
body: `発信者: ${from}\n着信先: ${to}\n\n--- 音声認識結果 ---\n${transcript}`
}
}
},
{
headers: {
Authorization: `Basic ${auth}`,
'Content-Type': 'application/json'
}
}
);
return callback(null, { status: 'success' });
} catch (err) {
console.error(err);
return callback(null, { status: 'error', message: err.message });
}
};
Settings & More >
Environment Variables` をクリックし、 Key と Value に次の内容を登録します。
Key | Value | 説明 |
---|---|---|
ZENDESK_DOMAIN | ****.zendesk.com | Zendesk で利用しているドメイン |
ZENDESK_EMAIL | your_email@example.com | Zendesk で登録しているメールアドレス |
ZENDESK_API_TOKEN | **** | Zendesk で取得した API トークン |
Key と Value の入力が完了したら Deploy All をクリックし変更を反映します。
Flow の作成
Twilio Studio にアクセスし、新しい Flow を作成します。名前は任意のもので構いません。 Start from scratch を選択し、空の Flow を作成します。
右のオプションから Gather Input on Call
をドラッグアンドドロップして配置します。プロパティを次のように設定します。
項目 | 設定内容 |
---|---|
Widget name | gather |
Say or play message | Say a message |
Text to say | ご用件をお話しください。 |
Language type | Default |
Language | Japanese |
Message voice | Default |
Number of loops | 1 |
Stop gathering after (Seconds) | 5 Seconds |
Stop gathering on keypress? | チェックを外す |
Stop gathering after (Digits) | 入力不要 |
Speech recognition language | Japanese(Japan) |
他はデフォルトのままで構いません。プロパティの設定が完了したら、 Save
をクリックして保存し、 Trigger の Incoming Call から gather に接続します。
次に、 Run Function
をドラッグアンドドロップで配置します。プロパティを次のように設定します。
項目 | 設定内容 |
---|---|
Widget name | function |
Service | 先に作成した Twilio Functions の Service |
Environment | ui |
Function | 先に作成した Function |
Function Parameters | 後述 |
Function Parameters
に次の Key と Value を登録します。
Key | Value | 補足 |
---|---|---|
SpeechResult | {{widgets.gather.SpeechResult}} | gather の部分は、先に作成した Gather Input on Call の Widget name と揃えてください |
From | {{trigger.call.From}} | 発信者の SIP アドレス |
To | {{trigger.call.To}} | 着信先の SIP アドレス |
プロパティの設定が完了したら、 Save
をクリックして保存し、 gather の User Said Something から function に接続します。
最終的に Flow が上のようになっていれば問題ありません。 Publish
を押して変更を反映します。
SIP Domain の作成
Voice SIP Domains にアクセスします。新しい SIP Domain を作成し、次のように設定します。
項目 | 設定内容 | 補足 |
---|---|---|
Properties | ||
Friendly Name | 任意のもの | Twilio コンソール上で表示される名前なので自由で構いません |
SIP URI | 任意のもの | 通話に使用する URI です。既存の URI と重複しないものである必要があります |
Voice Authentication | ||
IP Access Control Lists | 任意の ACL | 通話を許可する IP アドレスのリスト。未作成の場合は作成します |
Credential Lists | 任意の認証情報 | 通話を許可する認証情報のリスト。未作成の場合は作成します |
Call Control Configuration | ||
A Call Comes in | Studio - 先に作成した Flow | 通話を受け取ったときに呼び出す Flow を選択します |
他はデフォルトのままで構いません。入力が完了したら Save
をクリックし SIP Domain を作成します。
これで手順はすべて完了です。
動作確認
検証用 SIP クライアントから sip:アカウント名@SIP Domain の URI
に発信し、 Zendesk にチケットが作成されることを確認します。
sip:your-username@your-sip-domain.sip.twilio.com
まとめ
Twilio を用いることで、SIP 接続を受け取るアプリケーションが GUI 上の操作でローコードで実現できることが分かりました。今回は Zendesk との連携を紹介しましたが、Twilio Functions を用いることでさまざまな API と組み合わせることが可能です。今後も Twilio Functions を利用したアプリケーションについて執筆予定ですので、お楽しみに!