投稿

2020の投稿を表示しています

Twilioでオセロ(Reversi)を作ってみました

イメージ
本記事は、 Twilio Advent Calendar 2020 の12月22日担当分です。 はじめに Twilioについて勉強せねば、と思っていたところでタイミングよくAdvent Calendarの話があったので手を挙げてみました。私は普段、Webやメールを扱うエンジニアです。電話を扱う機会はそれほど多くありません。また、Twilioのハンズオンに参加したりドキュメントを読んだことがある程度で、プロダクトでTwilioを使い込んでいるわけでもありません。今回の記事は、Twilio初心者が実際に使ってみて得られた気付きを共有する内容と思って読んでいただけると幸いです。 新しいサービスやハードウェアを理解しようと思ったときに、チュートリアルに沿って手順通り進めるとたいてい動くものができあがるので、なんとなく理解した気分になってしまうのですが、そこから外れたことをやろうと思った瞬間「何から手を付けりゃいいんだっけ」と思考が固まってしまうことがよくあります(自分だけかもしれませんが)。そんな時は、何でもいいので自分で考えたアプリケーションにそのサービスなりハードウェアを組み込んでみるのが、理解のための近道と思っています。 というわけで、Twilioを使ってオセロ( Twilio-Reversi )を作ってみました。 概要 このアプリは、大きく分けて2つの機能で構成されています。一つは、電話機からTwilioの番号に電話をかけてゲームを進める部分です。もう一つは、打った手を対戦相手の電話機にSMSで通知する部分です。 まずはじめにゲームの進行部分です。 (1)電話機からTwilioの番号に電話をかけると、(2)Twilioからアプリケーションに対してWebhookのリクエストが飛びます。アプリケーションはリクエストに応じてゲームを進行させ、(3)状況に応じた結果を TwiML として返すと、(4)Twilioは電話機に対して音声応答を返します。これが基本的な流れですが、石を置けない座標を指定したり、手番じゃない方の電話機で石を置こうとすると、(3)の内容が変化して電話機には入力の拒否ややり直しを伝える音声応答が返ります。 次に対戦相手にSMSで通知する部分です。 こちらは非常にシンプルで、 SMS API を呼び出すと、Twilioが以下のようなメッセージをSMSとして

kintone-sendgrid-pluginを更新しました(v11)

イメージ
久しぶりにSendGrid kintoneプラグインをバージョンアップしました。使い方については ドキュメント を見ていただくとして、この記事では、ドキュメントに盛り込まなかった裏の仕組みや、今回のバージョンアップ作業に伴い調査したことなどをメモします。 バージョンアップ概要 今回のバージョンアップ内容は以下のとおりです。 Dynamic Transactional Template 文字列置換 if〜else句 イテレータ サンドボックスモード リクエストパラメータ表示 リクエストパラメータのチェック To表示名 対応フィールドの種類拡張 サポート対象ブラウザを明記 Google Chrome Mozzila firefox Dynamic Transactional Template 文字列置換 「文字列置換」はメール本文や件名に宛先(kintoneのレコード)ごとにkintoneフィールドの値を埋め込む機能です。この機能はこれまでサポートしてきたLegacy Transactional Templateでも利用できました。 Dynamic Transactional Templateではこれに加え、「if~else句」と「イテレータ」機能が利用できるようになりました。 if~else句 if~else句はBoolean値により表示を制御する機能です。テンプレートに以下のように記述するとタグ「show」の値に応じて表示を切り替えることができます。 {{if show}} showの値がtrueの場合に表示 {{else}} showの値がfalseの場合に表示 {{#if}} kintoneの場合、(今のところ)Boolean値を返すフィールドは存在しないため、フィールドの値が指定されていない場合に返るnull値をfalse,値が指定されている状態をtrueとして判定する挙動を利用して制御します。より具体的には、 以下の3種類のフィールド が値無指定の場合にnullを返すので、if〜else句の制御に利用できます。 ドロップダウン 日付 時刻 イテレータ イテレータは配列により可変長要素を生成する機能です。テンプレートに以下の