قم بتشغيل تطبيقات Alexa على سطر الأوامر. تشغيلها في سلاك. تشغيلها في أي مكان! يدعم مهارات ونوايا Amazon Alexa.
$ npm install chatskills
تعد Chatskills طريقة سريعة وسهلة لتشغيل تطبيقات Alexa خارج Amazon. أنشئ مهاراتك ونواياك بسهولة وقم بتشغيلها مباشرة من سطر الأوامر!
لا تتطلب Chatskills خادمًا ويمكن تشغيلها مباشرة في وحدة التحكم. ويمكن أيضًا تشغيله على الويب أو Slack أو في أي مكان. يتعامل مع الطلبات المقدمة من عدة مستخدمين ويحافظ على ذاكرة الجلسة. عندما يبدأ المستخدم محادثة باستخدام إحدى المهارات، يستمر تنفيذ المهارة ضمن سياق الجلسة، حتى تنتهي المهارة.
إليك ما يبدو عليه تطبيق Amazon Alexa، الذي يعمل على سطر الأوامر.
> chatskills, ask hello to say hi.
Hello, World!
> chatskills, ask horoscope for Scorpio.
Things are looking up today for Scorpio.
> chatskills, ask funny to tell me a joke
Knock knock.
> who's there?
Banana.
> banana who
Knock knock.
> whos there
Orange.
> orange who?
Orange you glad I didn't say banana?
في هذا المثال، يصل المستخدم إلى ثلاث مهارات مختلفة: الترحيب، والأبراج، والمضحك.
استخدام مهارات الدردشة أمر سهل. استخدم بناء جملة Alexa لإضافة مهارة جديدة، ثم قم بإنشاء بعض الأغراض. وهنا مثال بسيط.
var chatskills = require ( 'chatskills' ) ;
// Create a skill.
var hello = chatskills . app ( 'hello' ) ;
// Create an intent.
hello . intent ( 'helloWorld' , {
'slots' : { } ,
'utterances' : [ '{to |}{say|speak|tell me} {hi|hello|howdy|hi there|hiya|hi ya|hey|hay|heya}' ]
} ,
function ( req , res ) {
res . say ( 'Hello, World!' ) ;
}
) ;
// Respond to input.
chatskills . respond ( 'chatskills, ask hello to say hi' , function ( response ) {
console . log ( response ) ;
} ) ;
في المثال أعلاه، تتوسع قواعد الكلام تلقائيًا لتتوافق مع العبارات التالية:
helloWorld to say hi
helloWorld say hi
helloWorld to speak hi
helloWorld speak hi
helloWorld to tell me hi
helloWorld tell me hi
helloWorld to say hello
helloWorld say hello
helloWorld to speak hello
helloWorld speak hello
helloWorld to tell me hello
helloWorld tell me hello
helloWorld to say howdy
...
للتفاعل مع برنامج الدردشة الآلي باستخدام هذه المهارة، قل أيًا من العبارات المستهدفة. في المثال أعلاه، استخدمنا عبارة "لقول مرحبًا"، ولكن يمكنك مطابقتها مع أي من العبارات التي تم إنشاؤها. على سبيل المثال:
> chatskills, ask hello to tell me hi
Hello, World!
> chatskills, ask hello to say hello
Hello, World!
> chatskills, ask hello to say howdy
Hello, World!
لإنشاء روبوت دردشة يعمل محليًا على وحدة التحكم، ما عليك سوى تضمين حلقة لقراءة المدخلات.
var readlineSync = require ( 'readline-sync' ) ;
// Console client.
var text = ' ' ;
while ( text . length > 0 && text != 'quit' ) {
text = readlineSync . question ( '> ' ) ;
// Respond to input.
chatskills . respond ( text , function ( response ) {
console . log ( response ) ;
} ) ;
}
إذا كنت تستخدم الاستدعاءات غير المتزامنة في مهاراتك (مثل الطلب، وما إلى ذلك)، فستحتاج إلى استخدام حلقة غير متزامنة، بدلاً من حلقة while أعلاه. هنا مثال.
ليس عليك استخدام وحدة التحكم فقط! يمكنك تشغيل برنامج الدردشة الآلي الخاص بك في أي مكان، مثل Slack. انظر هنا للحصول على المثال الكامل.
var SlackBot = require ( 'slackbots' ) ;
var bot = new SlackBot ( { token : token , name : 'awesome' } ) ;
// Listen to slack messages.
bot . on ( 'message' , function ( message ) {
// Reply to humans.
if ( message . type == 'message' && message . text && message . subtype != 'bot_message' ) {
var author = getUserById ( message . user ) ;
var channel = getChannelById ( message . channel ) ;
// Respond to input, use author.name as the session id.
chatskills . respond ( message . text , author . name , function ( response ) {
if ( channel ) {
// Public channel message.
bot . postMessageToChannel ( channel . name , response ) ;
}
else {
// Private message.
bot . postMessageToUser ( author . name , response ) ;
}
} ) ;
}
} ) ;
المهارات هي البرامج التي يمكن لروبوت الدردشة الخاص بك تشغيلها. وهي تتكون من المقاصد، والتي تتكون من العبارات (العبارات التي يجب مطابقتها من مدخلات المستخدم)، والاستجابات، وذاكرة الجلسة. يمكن لكل مهارة الوصول إلى ذاكرة الجلسة، حتى تتمكن من تخزين واسترجاع المتغيرات للمساعدة في الاستجابة بذكاء للمستخدم.
فيما يلي مثال لإنشاء مهارة جديدة تسمى "الأبراج".
var horoscope = chatskills . app ( 'horoscope' ) ;
المهارات تتكون من النوايا. هذا هو المكان الذي تتم فيه مطابقة المدخلات من المستخدم مع مجموعة من الأقوال. عندما يتم العثور على تطابق، يتم تنفيذ هذا القصد. يمكن للقصد الحصول على/تعيين المتغيرات في جلسة المستخدم عن طريق استدعاء req.get('variable')
و req.set('variable', value)
. يمكن للقصد إخراج استجابة عن طريق استدعاء res.say('hello')
.
فيما يلي مثال لإنشاء نية جديدة لمهارة "الأبراج".
horoscope . intent ( 'predict' , {
'slots' : { 'SIGN' : 'LITERAL' } ,
'utterances' : [ 'for {signs|SIGN}' ]
} ,
function ( req , res ) {
res . say ( 'Things are looking up today for ' + req . get ( 'SIGN' ) + '.' ) ;
}
) ;
يمكن التفاعل مع هذه النية على النحو التالي:
> chatskills, ask horoscope for Scorpio
Things are looking up today for Scorpio.
هناك طريقتان لبدء تشغيل المهارة.
الطريقة الأولى لإطلاق مهارة ما هي إنشاء نية مثل "التشغيل". سيسمح لك هذا بإدخال: "مهارات الدردشة، اطلب من [اسم المهارة] التشغيل." بشرط أن يكون للهدف قيمة إرجاع صحيحة (للحفاظ على الجلسة حية)، فسيتم تشغيل مهارتك الآن.
يمكن العثور على مثال لمهارة "الجري" في لعبة التخمين.
app . intent ( 'run' , {
"slots" : { } ,
"utterances" : [ "{to|} {run|start|go|launch}" ]
} , function ( req , res ) {
var prompt = "Guess a number between 1 and 100!" ;
res . say ( prompt ) . reprompt ( prompt ) . shouldEndSession ( false ) ;
}
) ;
الطريقة الثانية لإطلاق مهارة ما هي إنشاء طريقة تشغيل للتشغيل تلقائيًا عند بدء تشغيل التطبيق الخاص بك. ثم ما عليك سوى الاتصال chatskills.launch(app)
لبدء مهارتك. يمكنك تمرير المهارة أو اسم المهارة. يمكنك أيضًا توفير معرف جلسة فريد اختياري.
على سبيل المثال: chatskills.launch(app)
أو chatskills.launch('horoscope')
أو chatskills.launch('horoscope', 'some-unique-id')
.
هنا مثال كامل.
var chatskills = require ( './lib/chatskills' ) ;
var readlineSync = require ( 'readline-sync' ) ;
// Create a skill.
var hello = chatskills . app ( 'hello' ) ;
// Launch method to run at startup.
hello . launch ( function ( req , res ) {
res . say ( "Ask me to say hi!" ) ;
// Keep session open.
res . shouldEndSession ( false ) ;
} ) ;
// Create an intent.
hello . intent ( 'helloWorld' , {
'slots' : { } ,
'utterances' : [ '{to |}{say|speak|tell me} {hi|hello|howdy|hi there|hiya|hi ya|hey|hay|heya}' ]
} ,
function ( req , res ) {
res . say ( 'Hello, World!' ) ;
}
) ;
// Start running our skill.
chatskills . launch ( hello ) ;
// Console client.
var text = ' ' ;
while ( text . length > 0 && text != 'quit' ) {
text = readlineSync . question ( '> ' ) ;
// Respond to input.
chatskills . respond ( text , function ( response ) {
console . log ( response ) ;
} ) ;
}
عندما يقدم المستخدم مدخلات، تتم مطابقة المدخلات مع كل مهارة وقائمة نواياه. عند العثور على تطابق، تبدأ جلسة جديدة، ويبدأ تنفيذ المهارة.
عندما تبدأ جلسة لمستخدم ما، يمكن أن تحصل نية المهارة المنشطة على/تعيين قيم متغيرة داخل الجلسة. هذا يسمح لك بتخزين واسترجاع البيانات.
عندما تكون الجلسة مفتوحة للمستخدم، يتم توجيه جميع المدخلات من المستخدم إلى المهارة النشطة. بهذه الطريقة، لا يحتاج المستخدم إلى إعادة طلب مهارة ("مهارات الدردشة، اطلب مرحبًا لإلقاء التحية"). بدلاً من ذلك، يمكن للمستخدم ببساطة تقديم نص، والذي سيتم مطابقته مع أهداف المهارة المنفذة حاليًا.
يمكن للقصد إبقاء الجلسة مفتوحة عن طريق إرجاع true
أو عن طريق استدعاء res.shouldEndSession(false)
وإنهاء الجلسة عن طريق إرجاع false
أو عن طريق استدعاء res.shouldEndSession(true)
. قد تحذف النية أيضًا بيان الإرجاع، وهو نفس إرجاع الخطأ.
للحصول على مثال لاستخدام الجلسة، راجع مهارة الأبراج. لاحظ أن القصد يطرح سؤالاً على المستخدم ثم يعود صحيحًا لمواصلة الجلسة. القصد لا يُرجع خطأ إلا بمجرد تقديم استجابة صالحة، وبالتالي إنهاء الجلسة.
باختصار، عندما تكون جلسة المستخدم مفتوحة، يتم توجيه جميع المدخلات من المستخدم إلى المهارة. عند انتهاء جلسة المستخدم، يجب تلقي المدخلات من المستخدم بتنسيق "مهارات الدردشة، اسأل نص [المهارة]"، لتنفيذ مهارة جديدة.
مهلة الجلسة الافتراضية هي ساعة واحدة دون أي إدخال من المستخدم. لتغيير مهلة الجلسة، قم بتعيين chatskills.timeout = 3600
، حيث يتم تحديد القيمة بالثواني. لتعطيل مهلة الجلسة، قم بتعيين القيمة إلى 0.
اسم برنامج chatbot الافتراضي هو "مهارات الدردشة". يجب أن تبدأ جميع طلبات تنفيذ المهارة باسم chatbot. على سبيل المثال، "مهارات الدردشة، اطلب مرحبًا لإلقاء التحية". لتخصيص اسم chatbot، استخدم ما يلي:
chatskills . name ( 'awesome' ) ;
لعرض التحذيرات والأخطاء، قم بتعيين chatskills.verbose = true
.
يستخدم Chatskills تطبيق Alexa لإنشاء العديد من نماذج الكلام من نواياك. للحصول على وصف أكثر تفصيلاً للأقوال، انظر هنا.
قم بتمرير كائن بخاصيتين: الفتحات والعبارات.
app . intent ( 'sampleIntent' ,
{
"slots" : { "NAME" : "LITERAL" , "AGE" : "NUMBER" } ,
"utterances" : [ "my {name is|name's} {names|NAME} and {I am|I'm} {1-100|AGE}{ years old|}" ]
} ,
function ( request , response ) { ... }
) ;
كائن الفتحات هو اسم بسيط: تعيين النوع. يجب أن يكون النوع أحد أنواع الفتحات المدعومة من Amazon: LITERAL، NUMBER، DATE، TIME، DURATION
كبديل لنوع الفتحة LITERAL
، الذي لم يعد مدعومًا من قبل Amazon، يوصى باستخدام أنواع الفتحات المخصصة بدلاً منه. فيما يلي مثال على تحديد نوع فتحة مخصص لـ DragonType
.
app . intent ( 'attack' ,
{
'slots' : { 'DragonType' : 'DRAGONTYPE' } ,
'utterances' : [ '{attack|fight|hit|use} {sword|dagger|wand} on {-|DragonType} dragon' ]
} , function ( request , response ) {
response . say ( 'You are attacking the ' + request . slot ( 'DragonType' ) + ' dragon!' ) ;
}
) ;
يمكنك تضمين أنواع فتحات مخصصة ضمن الكلام باستخدام بناء الجملة {-|CustomTypeName}
. يشير هذا إلى أن المصطلح يجب أن يأتي من قائمة القيم الخاصة بنوع الفتحة المخصصة. في المثال أعلاه، يستخدم الكلام المصطلح {-|DragonType}
، مما يشير إلى أن المصطلح يجب أن يأتي من قائمة القيم (الموضحة أدناه). بالنسبة لمهارات الدردشة، لا يلزم تقديم قائمة بالقيم - سيتم قبول أي كلمة لنوع الفتحة المخصصة واستخدامها كقيمة لها.
في حالة النشر إلى خدمة Amazon Alexa، يتعين عليك توفير أنواع الفتحات المخصصة لـ DragonType
عن طريق تحديد اسم النوع وقائمة القيم. على سبيل المثال:
النوع: DRAGONTYPE
قيم:
golden
fire
ice
water
snow
لاحظ أن مهارات الدردشة وAmazon Alexa سيقبلان فعليًا أي كلمة لقيمة الفتحة المخصصة. ليس من الضروري أن تتطابق مع كلمة من قائمة القيم. بهذه الطريقة، تكون أنواع الفتحات المخصصة مشابهة لـ LITERAL
.
يسمح لك بناء جملة الكلام بإنشاء العديد (مئات أو حتى آلاف) من عينات الكلام باستخدام عدد قليل من العينات التي يتم توسيعها تلقائيًا. يمكن تمرير أي عدد من نماذج الكلام في مصفوفة الكلام. فيما يلي بعض نماذج وحدات الماكرو للكلام وما سيتم توسيعه إليه.
"my favorite color is {red|green|blue|NAME}"
=>
"my favorite color is {red|NAME}"
"my favorite color is {green|NAME}"
"my favorite color is {blue|NAME}"
يتيح لك هذا تحديد طرق متعددة لقول العبارة، ولكن يتم دمجها في نموذج واحد للكلام
"{what is the|what's the|check the} status"
=>
"what is the status"
"what's the status"
"check the status"
عند التقاط قيمة فتحة رقمية، من المفيد إنشاء العديد من نماذج النطق بقيم أرقام مختلفة
"buy {2-5|NUMBER} items"
=>
"buy {two|NUMBER} items"
"buy {three|NUMBER} items"
"buy {four|NUMBER} items"
"buy {five|NUMBER} items"
يمكن أيضًا زيادة نطاقات الأرقام بخطوات
"buy {5-20 by 5|NUMBER} items"
=>
"buy {five|NUMBER} items"
"buy {ten|NUMBER} items"
"buy {fifteen|NUMBER} items"
"buy {twenty|NUMBER} items"
"what is your {favorite |}color"
=>
"what is your color"
"what is your favorite color"
قد تستخدم العديد من الأغراض نفس قائمة القيم المحتملة، لذا فأنت تريد تعريفها في مكان واحد، وليس في كل مخطط غرض. استخدم قاموس التطبيق.
app.dictionary = {"colors":["red","green","blue"]};
...
"my favorite color is {colors|FAVEORITE_COLOR}"
"I like {colors|COLOR}"
يمكنك عرض بطاقات Amazon Alexa Home عن طريق التعامل مع كائن البطاقة الذي تم إرجاعه في طريقة الاستجابة. عند استخدام تطبيق Alexa، سيتم عرض البطاقة الرئيسية في تطبيق Amazon Alexa على جهازك المحمول. عند استخدام مهارات الدردشة، يمكن التعامل مع البطاقة الرئيسية في طريقة رد الاتصال chatskills.respond()
، والتي تقوم بإرجاع وسيطتين: response
card
.
باستخدام كائن البطاقة، يمكنك عرض نص البطاقة وصورتها بأي طريقة تريدها. على سبيل المثال، إذا كنت تستضيف تطبيق مهارات الدردشة الخاص بك في Slack، فقد ترغب في عرض الصورة كوسائط مضمنة. وبالمثل، إذا كنت تستضيف برنامج دردشة نصيًا على وحدة التحكم، فقد ترغب ببساطة في إخراج البطاقة كنص.
أدناه مثال.
app . intent ( 'example' , {
"slots" : { } ,
"utterances" : [ "show a card" ]
} , function ( req , res ) {
// Show home card in Alexa app.
res . card ( {
type : 'Standard' ,
title : 'My Awesome Card' , // this is not required for type Simple or Standard
text : 'This is an example of an Alexa home card.' ,
image : { // image is optional
smallImageUrl : 'http://www.yoursite.com/image.jpg' , // required
largeImageUrl : null
}
} ) ;
} ) ;
// Respond to input.
chatskills . respond ( text , function ( response , card ) {
if ( ! card ) {
// Text response from res.say() method.
console . log ( response ) ;
}
else {
// Home card response from res.card() method.
console . log ( '[DISPLAYING CARD: Title=' + card . title + ', Text=' + card . text + ']' ) ;
}
} ) ;
معهد ماساتشوستس للتكنولوجيا
كوري بيكر http://www.primaryobjects.com/kory-becker