Amazon Web Services ブログ

Amazon Pinpoint の双方向 SMS を用いたシフト管理

この記事は、Shift management using Amazon Pinpoint’s 2-way-SMS を翻訳したものです。

小売店、レストラン、航空会社などの物理的な店舗や施設を持つビジネスでは、需要の変動、従業員の病欠、その他の不測の事態が発生した際、そのシフトを管理をするために信頼性の高いソリューションが必要となります。また、人員数に依存するこうしたビジネスでは、需要に対処するための方法として残業のシフトを作成することを余儀なくされています。

企業と従業員間の残業のシフトに関するコミュニケーションは、即時性と拡張性が必要になります。このような業界の従業員の中には、電子メールやプッシュ通知のような通信チャネルを持っていなかったり、インターネットへアクセスできない可能性があります。さらに一度従業員が出勤可能なシフトを受け取った場合、彼らは簡単に予約する方法を求め、場合によってはさらなるサポートをリクエストします。

これらの状況では、企業はインターネットに接続しない任意のモバイルデバイスで、通知と返信を可能にする通信方式を必要としています。 SMS はこれらの要件をすべて満たしており、さらに多くの機能も備えています。このブログでは、 Amazon Pinpoint SMS チャネルと、他のAWSサービスを使用して、利用可能なシフトを通知し、出勤可能な従業員が返信することによって予約できるアプリケーションを開発する方法を紹介します。

ブログで紹介するソリューションはシフト管理のためのものですが、小さな変更で、顧客・患者の予約を管理するようなこともできます。例えば、医療分野では、診察待ちの患者さんが、直前になってキャンセルすることがあります。このソリューションでは、診察待ちの情報を全ての患者に伝えることができ、SMSを通して予約の登録やキャンセルができるようになります。

アーキテクチャ

このソリューションでは、 Amazon Pinpoint 双方向 SMSAmazon DynamoDBAWS LambdaAmazon Simple Notification Service (SNS)Amazon Connect (オプション) を使用しています。次のセクションでは、アーキテクチャ図とロジックフローを深堀りします。

  1. オペレーターは、ShiftsCampaignDynamoDB テーブルにアイテムを追加します。アイテムは、Amazon Pinpoint の Campaign Id として使用されるユニークキーと、受信者が受け取る SMS のテキストメッセージCampaign Message 属性で構成されています。Campaign Message は、運用者が従業員に通知したいこと(利用可能なシフト)を含める必要があります。
    注 : AWSコンソール、またはAPIを経由したプログラムのどちらかで行うことができます。
  2. Amazon DynamoDB streams は、新しい Amazon DynamoDB アイテムの作成時にAWS Lambda 関数を呼び出します。AWS Lambda 関数は、Amazon DynamoDB のデータを使用し、Amazon Pinpoint の SMS チャネルの Campaign を作成し、実行します。セグメントは既存の残業のシフトに関心のある従業員の顧客セグメントを用います。顧客セグメントは前提条件であり、シフトの更新情報に関心のある従業員の SMS のエンドポイントが含まれています。
  3. 該当セグメントに含まれる従業員が、利用可能なシフトに関する SMS を受信し、その中から出勤可能なものを選んで予約することができます。
  4. 全ての SMS のインバウンド情報は、 Amazon SNS topic に配信されています。
  5. 2 way SMS AWS Lambda は、Amazon Simple Notification Service にサブスクライブし、メッセージボディを元にすべての SMS へのインバウンドを処理します。
  6. ShiftStatusDynamoDB テーブルは、SMS のインバウンドに応じて、シフトの更新情報を保存します。
  7. 従業員がさらなる支援を必要とする場合、SMS を通して Amazon Connect のアウトバウンドコールを要求することもできます。

以下の図は、従業員がアプリケーションに送信できる4種類のメッセージを示しています。部外者や悪意のあるユーザーからアプリケーションを保護するために、 2 way SMS AWS Lambda は、送信者の電話番号が許可リストに入っているかどうかを確認します。このソリューションでは、許可リストは AWS Lambda の環境変数としてハードコードされていますが、Amazon DynamoDB のようなデータベースに格納することもできます。

ソリューションの実装

前提条件

このソリューションを導入するためには、以下のものが必要です。

  1. SMS を送信する予定の国で 双方向SMS をサポートする送信元アイデンティティ (サポートされている国と地域 (SMS チャネル) )。
  2. SMSを送受信するための携帯電話。
  3. AWSのアカウント。
  4. Amazon Pinpoint プロジェクト (How to create an Amazon Pinpoint project)。
  5. SMS顧客セグメント – 1つのSMSエンドポイントを含むサンプルのCSVをダウンロードします。電話番号(列C)をあなたの番号に置き換え、それをAmazon Pinpoint にインポートします ( セグメントのインポート ) 。
  6. Amazon Pinpoint SMS sandbox であなたの携帯電話番号を追加 (Amazon Pinpoint SMS サンドボックス)。
  7. 従業員がエージェントのコールバックを要求できるようにしたい場合、Amazon Connect インスタンス、番号、コンタクトフローを使用します。Amazon Connect インスタンスにインポートできるAmazon Connect コンタクトフローの例をダウンロードしてください。
     注: 日本の +8170、+8180、+8190 はデフォルトで許可されておらず、クオータでのリクエストが必要です。日本の携帯電話番号にダイヤルする前に、サービスクオータ引き上げのリクエストを送信する必要があります。詳細については、『Amazon Connect 管理者ガイド』の「Amazon Connect サービスクォータ」を参照してください。

ソリューションのデプロイ

  1. CloudFormation テンプレートをダウンロードし、ソリューションをデプロイするAWSリージョンでAWS CloudFormation コンソールに移動します。
  2. 「スタックの作成」「新しいリソースを使用」を選択します。前提条件「テンプレートの準備完了」を選択し、テンプレートの指定「テンプレートファイルのアップロード」を選択します。ステップ 1 でダウンロードしたテンプレートをアップロードします。
  3. AWS CloudFormation のパラメータを以下のように入力します。
    1. ApprovedNumbers: このサービスで利用が許可されている携帯電話番号。 E.164形式で、複数の番号がある場合はカンマで区切ってください(例:+4457434243,+432434324)。
    2. OriginationNumber: Amazon Pinpoint に登録されているE.164形式の携帯電話番号(例:+44384238975)。
    3. PinpointProjectId: 既存のAmazon Pinpoint のプロジェクト ID。
    4. SegmentId: SMSを通知するAmazon Pinpointの既存のセグメントID。
    5. ConnectEnable: コンタクトフローとキューを持つ Amazon Connect インスタンスを既にお持ちの場合は、YES を選択します。NO を選択した場合、以下の項目はすべて無視してください。ソリューションは展開されますが、従業員はコールバックを要求することができなくなります。
    6. InstanceId: Amazon ConnectのインスタンスIDです。Amazon Connect インスタンスID の見つけ方は、こちらのリンクをご覧ください。
    7. ContactFlowID: このソリューションで使用するAmazon ConnectのコンタクトフローID。Amazon Connect コンタクトフローIDの見つけ方については、このリンクを参照してください。
    8. QueueID: Amazon Connect キューID。Amazon Connect キューIDを取得するには、Amazon Connect インスタンス > ルーティング > キューに移動し、ブラウザのURLに表示されます。(例:https://your-instance.awsapps.com/connect/queues/edit?id=0c7fed63-815b-4040-8dbc-255800fca6d7)。
    9. SourcePhoneNumber: ステップ7 で提供したコンタクトフローに接続されているE.164形式のAmazon Connectの番号です。
  4. ソリューションが正常にデプロイされたら、Amazon DynamoDB のコンソールに移動し、 ShiftStatusDynamoDB にアクセスします。作成された各項目は、シフトを表します。従業員がシフトを予約するために使用する一意の項目 shift_id、value を availabe にした shift_status 、シフトに関する追加情報を登録できる shift_info を持つ必要があります。以下の例を参照してください。
{
   "shift_id":{
      "S":"XYZ1234"
   },
   "shift_info":{
      "S":"15/08 5h nightshift"
   },
   "shift_status":{
      "S":"available"
   }
}

  1. Amazon Pinpoint コンソール > SMS > 電話番号に移動し、このソリューションで OriginationNumber として使用した電話番号を選択し、双方向 SMS を有効にします。受信メッセージの送信先セクションで、既存の SNS トピックを選択し、 TwoWaySMSSNSTopic という名前を含むトピックを選択します。
  2. Amazon DynamoDB コンソールに移動し、ShiftsCampaignDynamoDB テーブル にアクセスします。作成する各項目は、Amazon Pinpoint SMS キャンペーンを表します。Amazon DynamoDB アイテムを作成し、Amazon Pinpoint キャンペーン名として使用される一意の campaign_id を指定します。campaign_message という名前で新しい属性(文字列)を作成し、このキャンペーンを通して通知したい利用可能なすべてのシフトを入力します。従業員がリクエストできるようにしたいシフトのそれぞれのshift_id を含めることが重要です – 以下の例を参照してください。
    注 : このステップを完了することで、Amazon Pinpoint の SMS キャンペーンをトリガーします。あなたは、Amazon Pinpoint のコンソールからキャンペーンの情報と分析にアクセスすることができます。
{
  "campaign_id": {
    "S": "campaign_id1"
  },
  "campaign_message": {
    "S": "15/08 5h nightshift XYZ123, 18/08 3h dayshift XYZ124"
  }
}

ソリューションのテスト

  • Amazon DynamoDB の ShiftStatusDynamoDB テーブルにシフトが作成されていることを確認します。
  • SMSキャンペーンをテストするには、ソリューションのデプロイセクションのステップ 6 を複製します。
  • 以下のオプションで受信したSMSに返信します。
    1. 自動応答 で「This is not a valid shift code, please reply by typing REQUEST to view the available shifts」を受信するために、存在しない shift_id を送信します。
    2. シフトを予約し、 Amazon DynamoDBShiftStatusDynamoDB テーブルをチェックするために、有効で使用可能な shift_id を送信すると、shift_status が変更され、リクエストした従業員の携帯番号が入った新しい列が入ります。
    3. shift_status = available となっているすべてのシフトを受信するために REQUEST を送信します。
    4. Amazon Connect と一緒にソリューションをデプロイしている場合は、AGENT を送信し、呼び出しを待ちます。

次のステップ

このソリューションは、それぞれの発信元IDを取得することで、複数の国へのSMS送信をサポートするように拡張することができます。Amazon Pinpoint 電話番号検証サービスAPIを使用すると、アプリケーションは各受信者の国を識別し、それに応じて正しい発信元IDを選択することができます。

ビジネス要件によっては、エージェントのコールバックオプションをSMS経由のチャットに変更したい場合があります。このブログの手順に従って、SMS チャットを介してエージェントに接続するために、このソリューションを拡張することができます。

クリーンアップ

ソリューションを削除するには、AWS CloudFormation コンソールに移動し、デプロイされたスタックを削除します。

本記事の翻訳はソリューションアーキテクトの 中村 達也 が担当しました。