東京テレメッセージが2019/9/30をもってポケットベル(ページャー)のサービスを終了すると発表しました。
http://www.teleme.co.jp/service/magicmail/index.html
サービスの開始は1968年(日本電信電話公社(現NTT))。意外と昔からサービス開始していたんですね。自分の世代は高校生の時にポケベルが流行していました。公衆電話で高校生がベル打ちしてました。(昔話ですね)
終了するポケベルを惜しんで、今回はAmazon Connectでポケベル風メッセージ送信を実装しました。
概要
いわゆるポケベルですね。
- 送信者は電話を通じて送信したい文字のコード列を送信
- Amazon Connectは送信者とのインターフェースとなり、文字のコード列を受け取りLambdaに投げる
- Lambdaは文字のコード列を文字列に変換し、Slackに送信
文字のコード列を文字に変換するためのテーブルは以下のテーブルを参考にしました。
https://pc.watch.impress.co.jp/docs/column/musashino_proto/489609.html
高校生が公衆電話に向かってボタンを連打してるの、このテーブルを暗記してたのか。すごい...。
実装
以下の手順で実装していきます。
- SlackからIncoming Webhook URLを取得
- Serverless Frameworkを使用してLambdaをデプロイ
- Amazon Connect の設定
Lambda関数の管理にはServerless Framework を使用しています。依存するパッケージを含めたコードのzip化、デプロイや関連するAWSリソースの管理などを簡単なyamlに記述することで簡単にデプロイすることができます。SlackのIncoming Webhook URLの設定をここに行います。
Amazon Connectの設定はTerraformを眺めてもなさそうだったので手で作成します。フローはJSONからインポートします。
前提条件
以下を前提としています。
OSは多分なんでも動きますが、検証環境がないのでmacOSのみとなっています。また、node.js/AWS CLIのインストールや設定が終わっていなければ設定しましょう。
- macOS Mojave 10.14.6
- node.js がインストール済み
- AWS アカウントが設定され、ログイン可能な状態
- AWS CLIがインストールされ、適切な認証情報が設定済み
1. SlackからIncoming Webhook URLを取得
Slack でのIncoming Webhook の利用に作成します。
設定が完了すると https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
のようなURLが払い出されるのでメモしておきましょう。
2. Serverless Frameworkを使用してLambdaをデプロイ
Serverless Framework のインストール
serverless をインストールします。詳細なインストール手順はGetting Started with the Serverless Framework and AWS
を参考にしましょう。
$ npm install -g serverless
pythonのパッケージインストールに必要となるため、serverless-python-requirementsもインストールします。
$ npm install serverless-python-requirements
GitHubからソースを取得
GitHubから今回実行するLambda関数のソースを取得します。
$ git clone https://github.com/kangaechu/pager-serverless
$ cd pager-serverless
設定ファイルにSlackのWebhook URLを指定
サンプルファイルから設定ファイルを作成します。
$ cp config.dev.sample.json config.dev.json
設定ファイルを編集し、先ほど取得したSlackのWebhook URLを config.dev.json
に指定します。
{
"SLACK_WEBHOOK_URL": "https://hooks.slack.com/services/123456789/123456789/012345678901234567890123"
}
Lambdaにデプロイ
Lambdaにソースをデプロイします。エラーメッセージが出ていないことを確認します。
$ serverless deploy
かんたん。
3. Amazon Connect の設定
Amazon Connectを設定していきます。
Amazon Connect インスタンス追加
Amazon Connectで、「インスタンスを追加する」を選択します。
1 ID管理画面です。複雑なID管理は行わないので、「Amazon Connect 内にユーザーを保存」を選択し、アクセスURLに適当な名前を指定します。
2 管理者の作成画面です。必要な項目を埋めます。
次回以降にAmazon Connectにログインする際に必要な情報となります。
3 テレフォニーオプションです。電話の発信は行わないため、チェックボックスを外します。
4 データストレージです。特に設定が必要な項目がないため、次に進みます。
5 確認画面です。内容を確認し、「インスタンスを作成」を選択します。
インスタンスの作成が完了したら「今すぐ始める」を選択します。
Amazon Connectの設定
日本語化
電話番号を取得する
電話番号の取得では、以下の通り設定します。
- 国/地域: 日本
- タイプ: Direct Dial (通話料発信者負担)
- 電話番号: お好きなものを
呼び出すでは、Amazon Connectに電話をかけることができます。試しにかけてみましょう。
問い合わせフローのインポート
pager.json(問い合わせフロー)をローカルに保存します。
Amazon Connectの左側から「ルーティング」→「問い合わせフロー」を選択します。
「問い合わせフローの作成」を選択します。
グレイアウトした保存の右にある▼を選択し、「フローのインポート」を選択します。
先ほどダウンロードした pager.json
を選択し、インポートします。
こんなフローがインポートされれば成功です。
「プロンプトの再生」に表示されているワーニングは閉じておきましょう。
インポートしたフローを保存し、公開します。
Lambdaの設定
先ほど作成したLambdaをワークフローから呼び出せるようにしましょう。
AWS Connectのインスタンス一覧 から対象のインスタンスを選択します。
画面左側で「問い合わせフロー」を選択します。
画面右側の「AWS Lambda」で関数を追加します。pager関数を選択し、「Lambda関数の追加」を選択します。
下部の「Lambda 関数」に対象の関数が追加されたことを確認します。
再度Amazon Connectで「ポケベル」ワークフローを開きます。
「AWS Lambda関数を呼び出す」を開きます。
「関数を選択する」からpager-dev-encode を選択し、Saveを選択します。
上部から再度フローを保存し、公開します。
電話番号と問い合わせフローを関連づける
Amazon Connectの左側メニューから「ルーティング」→「電話番号」を選択します。
電話番号を選択します。
「問い合わせフロー/IVR」 に今回作成した「ポケベル」を選択します。
完成です!!!
電話をかけてみる
作成した電話番号に電話をかけて、ガイダンスの後に 64 04 93 12 94 44 79
と入力してみましょう。
Slackに通知されましたか?
参考資料
作成後にいろいろ調べてたら先駆者がいました。ハードウェアも作ってて本格的で素晴らしいですね。
https://qiita.com/mobilebiz/items/8fd213700e670cd3b9cd