開発日記(2024/05/14)今度こそGCP(Google Cloud Platform)とLINEボットを繋いでみる。
さて、前回はCurlでAPIを叩くまでしかできなかったので、今回はGCPから実行できるように、つまりNode.jsで実行できるようしたいと思います。初めてなので、まずローカルで試してからGCPで実行というステップでいきたいと思います。何事もステップバイステップが大事ですよね。
下記の記事を参考に、まずはnode.jsの標準モジュールを用いてHTTPリクエストが通るか確認。
無事にレスポンスが返ってくる。
ということでGPT先輩に教えをこく。
授けていただいたコードがこちら。まずライブラリをインストール。
npm install axios
で、下記のjsファイルを作成する。
const axios = require('axios');
const token = 'ここにトークンが入ります';
const userId = 'ここにIDが入ります';
const data = {
to: userId,
messages: [
{
type: 'text',
text: 'Hello, world1'
},
{
type: 'text',
text: 'Hello, world2'
}
]
};
axios.post('<https://api.line.me/v2/bot/message/push>', data, {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
}
})
.then(response => {
console.log('Success:', response.data);
})
.catch(error => {
console.error('Error:', error.response ? error.response.data : error.message);
});
すごい・・・一発で通った・・・
調子にのって頼りまくる。。。
教えに従ってさくっとGoogle Cloud SDKのセットアップを終える。
デプロイ用にpackage.jsonファイルを作成。
{
"name": "line-bot-function",
"version": "1.0.0",
"dependencies": {
"axios": "^0.21.1"
}
}
続いてindex.jsファイルを作成。ポイントは”exports.sendLineMessage”で一連の処理を関数として宣言?してるとこですかね。
const axios = require('axios');
exports.sendLineMessage = (req, res) => {
const token = 'ここにトークンが入ります';
const userId = 'ここにIDが入ります';
const data = {
to: userId,
messages: [
{
type: 'text',
text: 'Hello, world1'
},
{
type: 'text',
text: 'Hello, world2'
}
]
};
axios.post('<https://api.line.me/v2/bot/message/push>', data, {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
}
})
.then(response => {
res.status(200).send('Success: ' + JSON.stringify(response.data));
})
.catch(error => {
res.status(500).send('Error: ' + (error.response ? error.response.data : error.message));
});
};
これでデプロイしたところ、エンドポイントにアクセスしたらメッセージ送信が成功。本日の目的(GCPとLINEボットを繋いでみる。)は達成。
正直、ローカルで実行する場合とGCP上のエンドポイントにアクセスしたときに実行されることの違いはよく分かっておらず・・・なぜ後者の場合は関数としてエクスポートする必要があるのかについてGPT先生に聞いたところ次の回答。
なるほどな〜かしこいな〜。要は、エンドポイントへのアクセスをトリガーとして関数を実行するにあたり、これが処理だよ!ということを明示的にしておくということなのかしら。(わかってない・・・)
次はいよいよ、ASCから受け取った値をセットしてLINEにメッセージを送るをやりたいと思います。(つづく)
ご覧いただきありがとうございます。とても嬉しいです。