際際滷

際際滷Share a Scribd company logo
とても
弦羨たしいことが
あったのです。
プロロ`グ
Prologue
ある晩。
とても弦羨たしい
並周が軟きた。
lかにして
慌嗤したい。
SNS
でもlかをきzんで
の湖秤をBi
させるのはよくない。
LINE Bot 猜屬世辰燭
いいんじゃね?
ライトニングト`ク - とある LINE Bot の_k仝とても弦羨たしいことがあったのです々
ライトニングト`ク - とある LINE Bot の_k仝とても弦羨たしいことがあったのです々
ライトニングト`ク - とある LINE Bot の_k仝とても弦羨たしいことがあったのです々
よけいムカついた
まてまて。
念指のこの茶氏で、
LINE Bot 恬るスキル
誼したじゃん!
ライトニングト`ク - とある LINE Bot の_k仝とても弦羨たしいことがあったのです々
ライトニングト`ク - とある LINE Bot の_k仝とても弦羨たしいことがあったのです々
いくらBotとはいえ、
こんな弟に岱羽な冱~
ぶつけるのは般びない´
キャラ笋┐泙靴拭
$TAR $ARS の DR$ID
ならいいだろw
ライトニングト`ク - とある LINE Bot の_k仝とても弦羨たしいことがあったのです々
メイキング
Making
TypeScript v.2.1+
async / await
function foo() {
fizz()
.then(res1 => {
buzz(res1);
})
.then(res2 => {
fizzBuzz(res2);
})
}
function async foo() {
fizz()
.then(res1 => {
buzz(res1);
})
.then(res2 => {
fizzBuzz(res2);
})
}
function async foo() {
let res1 = await fizz();
.then(res1 => {
buzz(res1);
})
.then(res2 => {
fizzBuzz(res2);
})
}
function async foo() {
let res1 = await fizz();
buzz(res1)
.then(res2 => {
fizzBuzz(res2);
})
}
function async foo() {
let res1 = await fizz();
let res2 = await buzz(res1);
.then(res2 => {
fizzBuzz(res2);
})
}
function async foo() {
let res1 = await fizz();
let res2 = await buzz(res1);
fizzBuzz(res2);
}
app.post('/webhook', (req, res) => {
...
let gotIntent = new Promise((resolve, reject) => {
aiRequest.on('response', response => resolve(response));
aiRequest.end();
}) as any;
let main = gotIntent
.then(aiResponse => {
// 吭蹐蓮犬]めの奮並々だと蒙協。お]めの奮並を指基します。
if (aiResponse.result.action == 'recommendation') {
dietitian.dietitian.replyRecommendation(event.replyToken);
main.Cancel();// ここでI尖はK阻
}
else {
// 吭蹐蒙協されなかった栽は
// 奮並の鷂罎世協して侘B殆盾裂I尖へ卞る。
return mecab.parse(event.message.text);
}
})
.then(res => {
let gotAllNutrition = res
.filter(r => r[1] == '兆~')
.map(r => foodsDb.getNutrition(r[0]));
return Promise.all(gotAllNutrition);
})
.then(responseList => {
// ...ここに賞寄なアロ`v方の云悶...
})
app.post('/webhook', (req, res) => {
...
let gotIntent = new Promise((resolve, reject) => {
aiRequest.on('response', response => resolve(response));
aiRequest.end();
}) as any;
let main = gotIntent
.then(aiResponse => {
// 吭蹐蓮犬]めの奮並々だと蒙協。お]めの奮並を指基します。
if (aiResponse.result.action == 'recommendation') {
dietitian.dietitian.replyRecommendation(event.replyToken);
main.Cancel();// ここでI尖はK阻
}
else {
// 吭蹐蒙協されなかった栽は
// 奮並の鷂罎世協して侘B殆盾裂I尖へ卞る。
return mecab.parse(event.message.text);
}
})
.then(res => {
let gotAllNutrition = res
.filter(r => r[1] == '兆~')
.map(r => foodsDb.getNutrition(r[0]));
return Promise.all(gotAllNutrition);
})
.then(responseList => {
// ...ここに賞寄なアロ`v方の云悶...
})
app.post('/webhook', async (req, res) => {
...
let aiResponse: any = await new Promise((resolve, reje
aiRequest.on('response', response => resolve(respo
aiRequest.end();
});
// 吭蹐蓮犬]めの奮並々だと蒙協。お]めの奮並を指基します。
if (aiResponse.result.action == 'recommendation') {
dietitian.dietitian.replyRecommendation(event.repl
return; // ここでI尖はK阻
}
// 吭蹐蒙協されなかった栽は
// 奮並の鷂罎世協して侘B殆盾裂I尖へ卞る。
let res = await mecab.parse(event.message.text);
let gotAllNutrition = res
.filter(r => r[1] == '兆~')
.map(r => foodsDb.getNutrition(r[0]));
let responseList = await Promise.all(gotAllNutrition);
...
? 掲揖豚柵び竃しのBi嶄でも
returnでI尖嬉ち俳れる
? Bluebird 勣らんかったんや敬
まとめ
Conclusion
TypeScript マジお]め
?async/await ☆1
舞C嬬。
? さらに Visual Studio Code なら、Out-of-Box でコ`ディ
ング屶址からデバッグg佩までできて階酔m。
☆1 ... gHには async/await は TypeScript の嗅慥Sなどではなく、肝豚 JavaScript(ECMAScript) で
駻池莇┐C嬬?猟となっており、Babel などの麿のトランスパイラでも旋喘できます。
☆2 ... もちろん Visual Studio Code に泙蕕此Atom や Sublime Text 吉?、麼だったテキストエディ
タや IDE 貧でTypeScriptのコ`ディング屶址を誼られます。
Happy Coding :)
Learn, Practice, Share.
弖a
? AIが秘ったBotの恬り圭を僥ぼう
? Part1 古勣と_kh廠のセットアップ
http://qiita.com/nkjm/items/0e9d24b2f3429bd33c8d
? Part2 LINEでビジネスアカウントを恬撹する
http://qiita.com/nkjm/items/daa4e34b26ef937446c6
? Part3 Bot云悶のプログラムを_kする
http://qiita.com/nkjm/items/27d0131003a4b7ef02b9
? Part4 侘B殆盾裂と奮瞳デ`タベ`スで奮瞳とその剞Bを蒙協する
http://qiita.com/nkjm/items/d46bd91e1784adf1434b
? Part5 徭隼冱Z盾裂でメッセ`ジの吭蹐鮟矚しBotのスキルを互める
http://qiita.com/nkjm/items/fe2db6b8c4ee2980e2b4
? 仝Oracle Cloud Developers Meetup@臼今祇 - AIが秘ったBotの恬り圭を僥
ぼう々に VSCode と TypeScript で函りMんだ
http://qiita.com/jsakamoto/items/3f19cac806dc44c3dd50

More Related Content

Viewers also liked (10)

PPTX
St Michael Presentation
BudgetVideo4BIZ
?
PPTX
2017 customer intelligence signs which brands should never ignore
Subhakar Rao Surapaneni
?
PDF
15 ideas para la Transformaci┏n Digital de tu Negocio
Lluis Serra
?
PPTX
El relleno fluido no fue el ┣nico culpable - Foro T└cnico sobre la Troncal Ca...
Sociedad Colombiana de Ingenieros
?
PDF
Fanny Leberquier
SoSPIE
?
PPTX
The Power of Beneficiary-Directed Data (CMS BlueButton on FHIR API Update)
Mark Scrimshire
?
PPTX
Ouellette elixir 2017
Neuro, McGill University
?
PPT
openEHR: aspectos de interoperabilidad y mantenibilidad
Pablo Pazos
?
PPTX
匝寛伉尖僥における箭方譜柴
Senshu University
?
PDF
禽艶艶沿鉛庄稼一から深える安艶恢と粥沿沿の書朔とは
Yohhei Someya
?
St Michael Presentation
BudgetVideo4BIZ
?
2017 customer intelligence signs which brands should never ignore
Subhakar Rao Surapaneni
?
15 ideas para la Transformaci┏n Digital de tu Negocio
Lluis Serra
?
El relleno fluido no fue el ┣nico culpable - Foro T└cnico sobre la Troncal Ca...
Sociedad Colombiana de Ingenieros
?
Fanny Leberquier
SoSPIE
?
The Power of Beneficiary-Directed Data (CMS BlueButton on FHIR API Update)
Mark Scrimshire
?
Ouellette elixir 2017
Neuro, McGill University
?
openEHR: aspectos de interoperabilidad y mantenibilidad
Pablo Pazos
?
匝寛伉尖僥における箭方譜柴
Senshu University
?
禽艶艶沿鉛庄稼一から深える安艶恢と粥沿沿の書朔とは
Yohhei Someya
?

More from Jun-ichi Sakamoto (20)

PDF
C# で SPA を恬る BLAZOR WEBASSEMBLY のM晒 - そしてその枠へ
Jun-ichi Sakamoto
?
PDF
Pre-render Blazor WebAssembly on static web hosting at publishing time
Jun-ichi Sakamoto
?
PDF
安艶恢粥壊壊艶馨恢鉛霞が俳り謡くフロントエンド安艶恢蝕kの隆栖
Jun-ichi Sakamoto
?
PDF
がんばらなくても C# で Single Page Web アプリケ`ションがけてしまう仝Blazor々とは
Jun-ichi Sakamoto
?
PDF
Azure Application Insights + Angular5+ - Global azure boot camp 2019@sapporo LT
Jun-ichi Sakamoto
?
PDF
C# で Single Page Web アプリが_kできるフレ`ムワ`ク&_kh廠 仝Blazor々 D その古勣と Web アプリ_k宀にもたらす旋泣
Jun-ichi Sakamoto
?
PDF
C# で Single Page Web アプリを _kできる Blazor D その帆
Jun-ichi Sakamoto
?
PDF
Azure App Service Authentication
Jun-ichi Sakamoto
?
PDF
Ohotech蒙腹#14 セッション4 嚠御
Jun-ichi Sakamoto
?
PDF
Ohotech蒙腹#13 スマホで荷恬する カメラ原きWi-Fiラジコンカ` D C#とラズパイとWebアプリの室gで恬っちゃおう! D
Jun-ichi Sakamoto
?
PDF
連徨たちがロ`マ忖茶するための <s>HTML5</s> Web アプリ恬ってみた
Jun-ichi Sakamoto
?
PDF
More Azure Websites! - JAZUGさっぽろ "きたあず" 及5指茶氏ライトニングト`ク
Jun-ichi Sakamoto
?
PDF
How to automated test a web application with sending e mail feature
Jun-ichi Sakamoto
?
PDF
Introduction of "MarkdownPresenter"
Jun-ichi Sakamoto
?
PDF
セッション嶄に Twitter につぶやく!
Jun-ichi Sakamoto
?
PDF
Ohotech蒙腹#5嚠御 - タ`トルグラフィックでいろんな庁を宙いてみよう!
Jun-ichi Sakamoto
?
PDF
ASP.NET SignalR によるクイズWebアプリ 仝みんなで揖rプレイするWebアプリでCodeQuizに薬!々
Jun-ichi Sakamoto
?
PDF
[嚠御鐙] みんなで揖rプレイするクイズWebアプリでCodeQuizに薬蕋
Jun-ichi Sakamoto
?
PDF
ASP.NET で恬るとあるTwitter Bot -_kh廠からネット巷_までぜんぶo創だよ!-
Jun-ichi Sakamoto
?
PDF
CLR/H#74 LT IT茶氏k燕喘イチオシツ`ル
Jun-ichi Sakamoto
?
C# で SPA を恬る BLAZOR WEBASSEMBLY のM晒 - そしてその枠へ
Jun-ichi Sakamoto
?
Pre-render Blazor WebAssembly on static web hosting at publishing time
Jun-ichi Sakamoto
?
安艶恢粥壊壊艶馨恢鉛霞が俳り謡くフロントエンド安艶恢蝕kの隆栖
Jun-ichi Sakamoto
?
がんばらなくても C# で Single Page Web アプリケ`ションがけてしまう仝Blazor々とは
Jun-ichi Sakamoto
?
Azure Application Insights + Angular5+ - Global azure boot camp 2019@sapporo LT
Jun-ichi Sakamoto
?
C# で Single Page Web アプリが_kできるフレ`ムワ`ク&_kh廠 仝Blazor々 D その古勣と Web アプリ_k宀にもたらす旋泣
Jun-ichi Sakamoto
?
C# で Single Page Web アプリを _kできる Blazor D その帆
Jun-ichi Sakamoto
?
Azure App Service Authentication
Jun-ichi Sakamoto
?
Ohotech蒙腹#14 セッション4 嚠御
Jun-ichi Sakamoto
?
Ohotech蒙腹#13 スマホで荷恬する カメラ原きWi-Fiラジコンカ` D C#とラズパイとWebアプリの室gで恬っちゃおう! D
Jun-ichi Sakamoto
?
連徨たちがロ`マ忖茶するための <s>HTML5</s> Web アプリ恬ってみた
Jun-ichi Sakamoto
?
More Azure Websites! - JAZUGさっぽろ "きたあず" 及5指茶氏ライトニングト`ク
Jun-ichi Sakamoto
?
How to automated test a web application with sending e mail feature
Jun-ichi Sakamoto
?
Introduction of "MarkdownPresenter"
Jun-ichi Sakamoto
?
セッション嶄に Twitter につぶやく!
Jun-ichi Sakamoto
?
Ohotech蒙腹#5嚠御 - タ`トルグラフィックでいろんな庁を宙いてみよう!
Jun-ichi Sakamoto
?
ASP.NET SignalR によるクイズWebアプリ 仝みんなで揖rプレイするWebアプリでCodeQuizに薬!々
Jun-ichi Sakamoto
?
[嚠御鐙] みんなで揖rプレイするクイズWebアプリでCodeQuizに薬蕋
Jun-ichi Sakamoto
?
ASP.NET で恬るとあるTwitter Bot -_kh廠からネット巷_までぜんぶo創だよ!-
Jun-ichi Sakamoto
?
CLR/H#74 LT IT茶氏k燕喘イチオシツ`ル
Jun-ichi Sakamoto
?
Ad

Recently uploaded (9)

PDF
芦硫 暖, 儲旗 圍岻, 防和 高. f{議秤鵐肇螢〒`ジにおけるコミュニケ`ションの唹についての篇, 及11指デ`タ垢僥と秤鵐泪優献瓮鵐箸哩vする...
Matsushita Laboratory
?
PDF
猟B初AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
PPTX
Vibe Codingを兵めよう ?Cursorを箭に、ノ`コ`ドでのプログラミング悶Y?
iPride Co., Ltd.
?
PDF
猟B初Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
PPTX
弼について.pptx .
iPride Co., Ltd.
?
PDF
芦硫 暖, 臼翫 誰伏, 防和 高. 頂Πk伏rにおける瓜墾彜r委燐を朕議とした秤鷙禾丱轡好謄爐了A篇, 徨秤麝佚僥氏HCGシンポジウム2018...
Matsushita Laboratory
?
PPTX
茶氏_タ`ミナルコマント?秘薦儻堀晒_20250620. pptx. .
iPride Co., Ltd.
?
PDF
芦硫 暖, 防和 高. h廠Z崑を楚辛嬬にするためのみ繁垢岑嬬僥氏及4指碧賺а仂浸, 2018.
Matsushita Laboratory
?
PDF
Forguncy 10 u瞳古勣Y創 - ノ`コ`ドWebアプリ_kプラットフォ`ム
フォ`ガンシ`
?
芦硫 暖, 儲旗 圍岻, 防和 高. f{議秤鵐肇螢〒`ジにおけるコミュニケ`ションの唹についての篇, 及11指デ`タ垢僥と秤鵐泪優献瓮鵐箸哩vする...
Matsushita Laboratory
?
猟B初AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
Vibe Codingを兵めよう ?Cursorを箭に、ノ`コ`ドでのプログラミング悶Y?
iPride Co., Ltd.
?
猟B初Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
弼について.pptx .
iPride Co., Ltd.
?
芦硫 暖, 臼翫 誰伏, 防和 高. 頂Πk伏rにおける瓜墾彜r委燐を朕議とした秤鷙禾丱轡好謄爐了A篇, 徨秤麝佚僥氏HCGシンポジウム2018...
Matsushita Laboratory
?
茶氏_タ`ミナルコマント?秘薦儻堀晒_20250620. pptx. .
iPride Co., Ltd.
?
芦硫 暖, 防和 高. h廠Z崑を楚辛嬬にするためのみ繁垢岑嬬僥氏及4指碧賺а仂浸, 2018.
Matsushita Laboratory
?
Forguncy 10 u瞳古勣Y創 - ノ`コ`ドWebアプリ_kプラットフォ`ム
フォ`ガンシ`
?
Ad

ライトニングト`ク - とある LINE Bot の_k仝とても弦羨たしいことがあったのです々

  • 5. SNS
  • 18. $TAR $ARS の DR$ID ならいいだろw
  • 23. function foo() { fizz() .then(res1 => { buzz(res1); }) .then(res2 => { fizzBuzz(res2); }) }
  • 24. function async foo() { fizz() .then(res1 => { buzz(res1); }) .then(res2 => { fizzBuzz(res2); }) }
  • 25. function async foo() { let res1 = await fizz(); .then(res1 => { buzz(res1); }) .then(res2 => { fizzBuzz(res2); }) }
  • 26. function async foo() { let res1 = await fizz(); buzz(res1) .then(res2 => { fizzBuzz(res2); }) }
  • 27. function async foo() { let res1 = await fizz(); let res2 = await buzz(res1); .then(res2 => { fizzBuzz(res2); }) }
  • 28. function async foo() { let res1 = await fizz(); let res2 = await buzz(res1); fizzBuzz(res2); }
  • 29. app.post('/webhook', (req, res) => { ... let gotIntent = new Promise((resolve, reject) => { aiRequest.on('response', response => resolve(response)); aiRequest.end(); }) as any; let main = gotIntent .then(aiResponse => { // 吭蹐蓮犬]めの奮並々だと蒙協。お]めの奮並を指基します。 if (aiResponse.result.action == 'recommendation') { dietitian.dietitian.replyRecommendation(event.replyToken); main.Cancel();// ここでI尖はK阻 } else { // 吭蹐蒙協されなかった栽は // 奮並の鷂罎世協して侘B殆盾裂I尖へ卞る。 return mecab.parse(event.message.text); } }) .then(res => { let gotAllNutrition = res .filter(r => r[1] == '兆~') .map(r => foodsDb.getNutrition(r[0])); return Promise.all(gotAllNutrition); }) .then(responseList => { // ...ここに賞寄なアロ`v方の云悶... })
  • 30. app.post('/webhook', (req, res) => { ... let gotIntent = new Promise((resolve, reject) => { aiRequest.on('response', response => resolve(response)); aiRequest.end(); }) as any; let main = gotIntent .then(aiResponse => { // 吭蹐蓮犬]めの奮並々だと蒙協。お]めの奮並を指基します。 if (aiResponse.result.action == 'recommendation') { dietitian.dietitian.replyRecommendation(event.replyToken); main.Cancel();// ここでI尖はK阻 } else { // 吭蹐蒙協されなかった栽は // 奮並の鷂罎世協して侘B殆盾裂I尖へ卞る。 return mecab.parse(event.message.text); } }) .then(res => { let gotAllNutrition = res .filter(r => r[1] == '兆~') .map(r => foodsDb.getNutrition(r[0])); return Promise.all(gotAllNutrition); }) .then(responseList => { // ...ここに賞寄なアロ`v方の云悶... }) app.post('/webhook', async (req, res) => { ... let aiResponse: any = await new Promise((resolve, reje aiRequest.on('response', response => resolve(respo aiRequest.end(); }); // 吭蹐蓮犬]めの奮並々だと蒙協。お]めの奮並を指基します。 if (aiResponse.result.action == 'recommendation') { dietitian.dietitian.replyRecommendation(event.repl return; // ここでI尖はK阻 } // 吭蹐蒙協されなかった栽は // 奮並の鷂罎世協して侘B殆盾裂I尖へ卞る。 let res = await mecab.parse(event.message.text); let gotAllNutrition = res .filter(r => r[1] == '兆~') .map(r => foodsDb.getNutrition(r[0])); let responseList = await Promise.all(gotAllNutrition); ...
  • 33. TypeScript マジお]め ?async/await ☆1 舞C嬬。 ? さらに Visual Studio Code なら、Out-of-Box でコ`ディ ング屶址からデバッグg佩までできて階酔m。 ☆1 ... gHには async/await は TypeScript の嗅慥Sなどではなく、肝豚 JavaScript(ECMAScript) で 駻池莇┐C嬬?猟となっており、Babel などの麿のトランスパイラでも旋喘できます。 ☆2 ... もちろん Visual Studio Code に泙蕕此Atom や Sublime Text 吉?、麼だったテキストエディ タや IDE 貧でTypeScriptのコ`ディング屶址を誼られます。
  • 34. Happy Coding :) Learn, Practice, Share.
  • 35. 弖a ? AIが秘ったBotの恬り圭を僥ぼう ? Part1 古勣と_kh廠のセットアップ http://qiita.com/nkjm/items/0e9d24b2f3429bd33c8d ? Part2 LINEでビジネスアカウントを恬撹する http://qiita.com/nkjm/items/daa4e34b26ef937446c6 ? Part3 Bot云悶のプログラムを_kする http://qiita.com/nkjm/items/27d0131003a4b7ef02b9 ? Part4 侘B殆盾裂と奮瞳デ`タベ`スで奮瞳とその剞Bを蒙協する http://qiita.com/nkjm/items/d46bd91e1784adf1434b ? Part5 徭隼冱Z盾裂でメッセ`ジの吭蹐鮟矚しBotのスキルを互める http://qiita.com/nkjm/items/fe2db6b8c4ee2980e2b4 ? 仝Oracle Cloud Developers Meetup@臼今祇 - AIが秘ったBotの恬り圭を僥 ぼう々に VSCode と TypeScript で函りMんだ http://qiita.com/jsakamoto/items/3f19cac806dc44c3dd50