-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.gs
88 lines (79 loc) · 2.55 KB
/
main.gs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
const CHANNEL_ACCESS_TOKEN = ''; // LINE Botのアクセストークン
const OPENAI_API_KEY = ""; // OpenAIのAPIキー
const DALLE_API = "https://api.openai.com/v1/images/generations"; // DALL-E API URL
// POSTリクエストを受け取る関数
function doPost(e) {
if (!e || !e.postData) {
console.error('postData is undefined');
return ContentService.createTextOutput(JSON.stringify({'error': 'Bad Request'}))
.setMimeType(ContentService.MimeType.JSON).setResponseCode(400);
}
const json = JSON.parse(e.postData.contents);
const replyToken = json.events[0].replyToken;
if (!replyToken) {
console.error('Reply token is missing');
return;
}
const userMessage = json.events[0].message.text;
generateImageURL(userMessage, replyToken);
}
// DALL-Eを使用して画像URLを生成し、LINEに返信する関数
function generateImageURL(text, replyToken) {
const data = {
'prompt': text,
'model': 'dall-e-3',
'response_format': 'url'
};
const options = {
'method': 'post',
'headers': {
'Authorization': 'Bearer ' + OPENAI_API_KEY,
'Content-Type': 'application/json'
},
'payload': JSON.stringify(data)
};
try {
const response = UrlFetchApp.fetch(DALLE_API, options);
const json = JSON.parse(response.getContentText());
if (json.data && json.data[0].url) {
const imageUrl = json.data[0].url;
sendImageReply(replyToken, imageUrl);
} else {
sendReply(replyToken, [{'type': 'text', 'text': 'すまん!画像の生成に失敗しましたぞい。'}]);
}
} catch (e) {
console.error('Failed to generate image: ' + e.toString());
sendReply(replyToken, [{'type': 'text', 'text': 'すまん!画像の生成にエラーが発生してしまったぞい'}]);
}
}
// LINEに画像を返信する関数
function sendImageReply(replyToken, imageUrl) {
const messages = [{
'type': 'image',
'originalContentUrl': imageUrl,
'previewImageUrl': imageUrl
}];
sendReply(replyToken, messages);
}
// LINEに返信する関数
function sendReply(replyToken, messages) {
const url = 'https://api.line.me/v2/bot/message/reply';
const headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN
};
const postData = {
'replyToken': replyToken,
'messages': messages
};
const options = {
'method': 'post',
'headers': headers,
'payload': JSON.stringify(postData)
};
try {
UrlFetchApp.fetch(url, options);
} catch (e) {
console.error('Error sending message: ' + e.toString());
}
}