Twilio StudioとFunctionsで気象庁の天気予報データを使って、今日の天気を教えてくれるSMSボットを作ってみた
こんにちは、昴です。
今回はTwilio StudioとTwilio Functions、気象庁の天気予報データを組み合わせて、SMSを送ると今日の天気を自動で返信してくれる「天気予報ボット」を作ってみました。
はじめに
Twilioは電話やSMS、チャットなどのコミュニケーション機能を組み込むためのクラウドベースのAPIプラットフォームです。TwilioのAPIを利用することで、通信ソリューションを自由にカスタマイズして構築することができます。
今回は、Twilioのノーコードツールである「Twilio Studio」と、サーバーレスでコードを実行できる「Twilio Functions」を連携させます。気象庁が公開している天気予報データを使用し、ユーザーにSMSで届けるという仕組みです。
なお、今回使用する気象庁のデータは開発者向けの公式APIとして提供されているものではないため、予告なく仕様が変更される可能性がある点だけご注意ください。
前提・検証環境
本記事の手順を進めるにあたり、以下の環境および権限が必要です。
- Twilioアカウントが開設済みであること
- SMS送受信が可能なTwilio電話番号を購入済みであること
実践
Functionsの作成
まずは、気象庁APIを叩いて天気情報を取得するためのプログラムをTwilio Functionsで作成します。
- ServiceとFunctionの作成
Twilioコンソールのサイドバーから Functions and Assets > Services へ移動し、「Create Service」ボタンをクリックします。

サービス名(例:weather-service)を入力して作成したら、エディタ画面の「Add +」から「Add Function」を選択し、パス(例:/get-weather)を設定します。

- Dependencies(依存関係)の追加
外部からデータを持ってくるための準備をします。画面左下の「Dependencies」をクリックしてください。
「Node.js v22」はそのままで大丈夫です。その下の入力欄を使って、「axios(アクシオス)」というツールを追加します。バージョンに * を入力して追加してください。

- コードの実装
作成したFunctionに以下のコードを貼り付けます。今回は東京地方(コード: 130000)の今日の天気を取得する仕様にしています。
const axios = require('axios');
exports.handler = async function(context, event, callback) {
try {
// axiosを使って気象庁APIから東京地方の予報を取得
const response = await axios.get('https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json');
// 今日の天気予報(テキスト)を抽出
const weather = response.data[0].timeSeries[0].areas[0].weathers[0];
// Studioフローで利用できるように結果を返す
return callback(null, { weather: weather });
} catch (error) {
console.error(error);
return callback(error);
}
};
貼り付けたら「Save」をクリックし、最後に「Deploy All」を押して公開します。

Studioフローの作成
次に、SMSを受信したときの動きを「Twilio Studio」で視覚的に作っていきます。
- トリガーの設定
Studioで新しいフローを作成し(例:Weather_SMS_Flow)、「Start from scratch」を選択します。

今回はメッセージを受け取った時に動かしたいので、Triggerウィジェットの 「Incoming Message」 を起点にします。
- Run Function ウィジェット
「Run Function」ウィジェットを配置し、「Incoming Message」から繋ぎます。
右側の設定パネルで、先ほど作成した「Service」「Environment」「Function」をそれぞれ選択します。これで、メッセージが届くと自動的に天気情報を取得しにいきます。

- Send Message ウィジェット
最後に、結果を返信するための「Send Message」ウィジェットを配置し、Run Functionの「Success」から繋ぎます。
Message Body には以下のように入力します。
お問い合わせありがとうございます。
今日の東京の天気は【 {{widgets.function_1.parsed.weather}} 】です。

設定ができたら「Publish」をクリックしてフローを公開します。
電話番号への接続
最後に、作成したフローと実際の電話番号を紐付けます。
Phone Numbers > Manage > Active Numbers へ移動し、使用する番号を選択します。
Messaging セクションまでスクロールし、「A message comes in(メッセージ受信時)」にてStudio Flowを設定し、作成したフローを選択します。
設定後は「Save Configuration」をクリックして保存します。

確認
すべての設定が完了したら、実際にスマートフォンからSMSを送って動作を確認してみます。自分のスマホから、今回フローを設定したTwilioの電話番号宛てに何かメッセージを送信します。(「天気教えて」「テスト」など、内容はなんでも構いません)
送信して数秒後に、以下のようなSMSがTwilio番号から返ってくれば成功です。

電話の自動音声(IVR)とは異なり、SMSの場合は天気の情報がテキストとして手元に残るため、あとから見返すのにも便利ですね。
まとめ
今回はTwilio StudioとTwilio Functions、そして気象庁APIを組み合わせて、SMSで今日の天気を自動返信してくれるボットを作成しました。
サーバーレス環境であるFunctionsを活用することで、外部APIとの連携も数行のコードで簡単に実装することが可能です。今回は気象庁の天気予報を使いましたが、この仕組みを応用すれば、自社のデータベースと連携して「最新の在庫状況の確認」や「予約日時の自動案内」などをSMSで返信するといったカスタマーサポートの自動化にも繋げることができます。
本ブログが少しでも参考になれば幸いです。
告知
Twilio/SendGridセミナーを毎月開催しています
クラスメソッドでは毎月Twilio/SendGridのセミナーを実施しています。
クラスメソッドではTwilio/SendGridのセミナーを毎月開催しております。いずれもTwilio及びSendGridを良く知らない方向けに基本的な部分から解説する内容となっておりますので、今後Twilio/SendGridの導入を検討している方や、既に導入済で改めて基本的な部分を勉強したいと考える方は、是非お気軽にご参加いただければと思います。






