Etkinlik işleyicisi kullanan olay temelli konuşmalar
Makale
ŞUNLAR IÇIN GEÇERLIDIR: SDK v4
Etkinlik işleyicisi, botunuz için konuşma mantığını düzenlemenin olay temelli bir yoludur.
Her farklı etkinlik türü veya alt türü farklı bir konuşma olayını temsil eder.
Botun dönüş işleyicisi , kapsadığı etkinlik türü için tek tek etkinlik işleyicisini çağırır.
Örneğin, bot bir ileti etkinliği alırsa, dönüş işleyicisi gelen etkinliği görür ve ileti etkinliği etkinlik işleyicisine gönderir. Botunuzu oluştururken, iletileri işlemeye ve yanıtlamaya yönelik bot mantığınız, ileti etkinliği işleyicisinde buna gider. Benzer şekilde, konuşmaya eklenen üyeleri işleme mantığınız, konuşmaya her üye eklendiğinde çağrılan eklenen üyeler işleyicinize gider.
Bot mantığınızı düzenlemenin diğer yolları için, botların nasıl çalıştığına ilişkin bot mantığı bölümüne bakın.
Not
Bot Framework JavaScript, C# ve Python SDK'ları desteklenmeye devam edecektir, ancak Java SDK'sı son uzun vadeli destek Kasım 2023'te sona erecek şekilde kullanımdan kaldırılacaktır.
Java SDK ile oluşturulan mevcut botlar çalışmaya devam edecektir.
Yeni bot derlemesi için Microsoft Copilot Studio'yu kullanmayı göz önünde bulundurun ve doğru copilot çözümünü seçme hakkında bilgi edinin.
Bu işleyiciler için mantığınızı uygulamak için botunuzda aşağıdaki örnek etkinlik işleyicisi bölümünde olduğu gibi bu yöntemleri geçersiz kılacaksınız. Bu işleyicilerin her biri için temel uygulama yoktur, bu nedenle yalnızca geçersiz kılmanıza istediğiniz mantığı ekleyin.
Temel dönüş işleyicisini geçersiz kılmak isteyeceğiniz bazı durumlar vardır, örneğin dönüş sonunda kaydetme durumu . Bunu yaparken, temel uygulamasının ek kodunuzdan önce çalıştırıldığından emin olmak için ilk olarak öğesini çağırdığınızdan await base.OnTurnAsync(turnContext, cancellationToken);OnTurnAsync emin olun. Bu temel uygulama, diğer şeylerin yanı sıra gibi OnMessageActivityAsyncetkinlik işleyicilerinin geri kalanını çağırmaktan sorumludur.
JavaScript ActivityHandler bir olay yayımlayıcısı ve dinleyici düzeni kullanır.
Örneğin, ileti etkinlikleri için bir olay dinleyicisi kaydetmek için yöntemini kullanın onMessage . Birden fazla dinleyici kaydedebilirsiniz. Bot bir ileti etkinliği aldığında, etkinlik işleyicisi gelen etkinliği görür ve etkinlik dinleyicilerinin her birini onMessage kaydedildikleri sırayla gönderir.
Botunuzu oluştururken iletileri işlemeye ve yanıtlamaya yönelik bot mantığınız dinleyicilere onMessage gider. Benzer şekilde, konuşmaya eklenen üyeleri işleme mantığınız dinleyicilerinize onMembersAdded gider. Bu mantık, konuşmaya her üye eklendiğinde çağrılır.
Bu dinleyicileri eklemek için aşağıdaki Bot mantığı bölümünde gösterildiği gibi botunuza kaydedeceksiniz. Her dinleyici için bot mantığınızı ekleyin ve ardından sonunda arama next() yapmaya dikkat edin. çağrısı next()yaparak bir sonraki dinleyicinin çalıştırıldığından emin olursunuz.
Dönüş bitmeden önce durumu kaydettiğinizden emin olun. Bunu yapmak için etkinlik işleyicisi run yöntemini geçersiz kılabilir ve üst run öğesinin yöntemi tamamlandıktan sonra durumu kaydedebilirsiniz.
Temel dönüş işleyicisini geçersiz kılmak isteyeceğiniz yaygın bir durum yoktur, bu nedenle bunu yapmaya çalışırsanız dikkatli olun.
adlı onDialogözel bir işleyici var. İşleyici onDialog , işleyicilerin geri kalanı çalıştırıldıktan ve belirli bir etkinlik türüne bağlı olmadığında sonunda çalışır. Yukarıdaki tüm işleyicilerde olduğu gibi, işlemin geri kalanının tamamlanmasını sağlamak için çağrısı next() yapmaya özen gösterin.
Bu işleyiciler için mantığınızı uygulamak için botunuzda aşağıdaki örnek etkinlik işleyicisi bölümünde olduğu gibi bu yöntemleri geçersiz kılacaksınız. Bu işleyicilerin her biri için temel uygulama yoktur, bu nedenle geçersiz kılmanıza istediğiniz mantığı ekleyin.
Temel dönüş işleyicisini geçersiz kılmak isteyeceğiniz bazı durumlar vardır, örneğin dönüş sonunda kaydetme durumu . Bunu yaparken, temel uygulamasının ek kodunuzdan önce çalıştırıldığından emin olmak için ilk olarak öğesini çağırdığınızdan super.onTurn(turnContext);onTurn emin olun. Bu temel uygulama, diğer şeylerin yanı sıra gibi onMessageActivityetkinlik işleyicilerinin geri kalanını çağırmaktan sorumludur.
Botunuzu oluştururken iletileri işlemeye ve yanıtlamaya yönelik bot mantığınız bu on_message_activity işleyiciye gider. Benzer şekilde, konuşmaya eklenen üyeleri işleme mantığınız, konuşmaya her üye eklendiğinde çağrılan işleyicinize on_members_added gider.
Örneğin, bot bir ileti etkinliği alırsa, dönüş işleyicisi gelen etkinliği görür ve etkinlik işleyicisine on_message_activity gönderir.
Bu işleyiciler için mantığınızı uygulamak için botunuzda aşağıdaki örnek etkinlik işleyicisi bölümünde olduğu gibi bu yöntemleri geçersiz kılacaksınız. Bu işleyicilerin her biri için temel uygulama yoktur, bu nedenle yalnızca geçersiz kılmanıza istediğiniz mantığı ekleyin.
Temel dönüş işleyicisini geçersiz kılmak isteyeceğiniz bazı durumlar vardır, örneğin dönüş sonunda kaydetme durumu . Bunu yaparken, temel uygulamasının ek kodunuzdan önce çalıştırıldığından emin olmak için ilk olarak öğesini çağırdığınızdan await super().on_turn(turnContext);on_turn emin olun. Bu temel uygulama, diğer şeylerin yanı sıra gibi on_message_activityetkinlik işleyicilerinin geri kalanını çağırmaktan sorumludur.
Etkinlik işleme
Bot mantığı, bir veya daha fazla kanaldan gelen etkinlikleri işler ve yanıt olarak giden etkinlikler oluşturur.
Ana bot mantığı bot kodunda tanımlanır. Bir botu etkinlik işleyicisi olarak uygulamak için, arabirimini uygulayan bot sınıfınızı öğesinden ActivityHandlertüretin IBot . ActivityHandler, ve OnMembersAddedAsyncgibi OnMessageActivityAsyncfarklı etkinlik türleri için çeşitli işleyicileri tanımlar. Bu yöntemler korunur, ancak 'den ActivityHandlertürediğimiz için geçersiz kılınabilir.
içinde ActivityHandler tanımlanan işleyiciler şunlardır:
Etkinlik
İşleyici
Açıklama
Alınan herhangi bir etkinlik türü
OnTurnAsync
Alınan etkinliğin türüne göre diğer işleyicilerden birini çağırır.
İleti etkinliği alındı
OnMessageActivityAsync
Bir message etkinliği işlemek için bunu geçersiz kılın.
Alınan konuşma güncelleştirme etkinliği
OnConversationUpdateActivityAsync
Bir conversationUpdate etkinlikte, bot dışındaki üyeler konuşmaya katıldıysa veya konuşmayı bıraktıysa işleyiciyi çağırır.
Bot olmayan üyeler konuşmaya katıldı
OnMembersAddedAsync
Konuşmaya katılan üyeleri işlemek için bunu geçersiz kılın.
Bot olmayan üyeler konuşmadan ayrıldı
OnMembersRemovedAsync
Konuşmadan ayrılan üyeleri işlemek için bunu geçersiz kılın.
Olay etkinliği alındı
OnEventActivityAsync
Bir event etkinlikte, olay türüne özgü bir işleyici çağırır.
Alınan belirteç yanıtı olay etkinliği
OnTokenResponseEventAsync
Belirteç yanıt olaylarını işlemek için bunu geçersiz kılın.
Belirteç dışı yanıt olay etkinliği alındı
OnEventAsync
Diğer olay türlerini işlemek için bunu geçersiz kılın.
Alınan ileti tepki etkinliği
OnMessageReactionActivityAsync
Bir messageReaction etkinlikte, bir iletiye bir veya daha fazla tepki eklendiğinde veya bir iletiden kaldırıldığında işleyiciyi çağırır.
İletiye eklenen ileti tepkileri
OnReactionsAddedAsync
İletiye eklenen tepkileri işlemek için bunu geçersiz kılın.
İletiden kaldırılan ileti tepkileri
OnReactionsRemovedAsync
İletiden kaldırılan tepkileri işlemek için bunu geçersiz kılın.
Yükleme güncelleştirme etkinliği alındı
OnInstallationUpdateActivityAsync
Bir installationUpdate etkinlikte, bot yüklenip yüklenmediğine veya kaldırıldığına bağlı olarak bir işleyici çağırır.
Bot yüklendi
OnInstallationUpdateAddAsync
Botun bir kuruluş birimine ne zaman yüklendiğine ilişkin mantık eklemek için bunu geçersiz kılın.
Bot kaldırıldı
OnInstallationUpdateRemoveAsync
Botun bir kuruluş birimi içinde kaldırıldığında mantığı eklemek için bunu geçersiz kılın.
Alınan diğer etkinlik türü
OnUnrecognizedActivityTypeAsync
Aksi takdirde işlenmeyen herhangi bir etkinlik türünü işlemek için bunu geçersiz kılın.
Bu farklı işleyiciler, gelen HTTP isteğine karşılık gelen etkinlik hakkında bilgi sağlayan bir turnContext öğesine sahiptir. Etkinlikler çeşitli türlerde olabilir, bu nedenle her işleyici kendi dönüş bağlam parametresinde kesin olarak türlenmiş bir etkinlik sağlar; çoğu durumda, OnMessageActivityAsync her zaman işlenir ve genellikle en yaygın olanıdır.
Bu çerçevenin önceki 4.x sürümlerinde olduğu gibi genel yöntemini OnTurnAsyncuygulama seçeneği de vardır. Şu anda, bu yöntemin temel uygulaması hata denetimini işler ve sonra gelen etkinliğin türüne bağlı olarak belirli işleyicilerin her birini (bu örnekte tanımladığımız ikisi gibi) çağırır. Çoğu durumda, bu yöntemi yalnız bırakabilir ve tek tek işleyicileri kullanabilirsiniz, ancak durumunuz için özel bir uygulama OnTurnAsyncgerekiyorsa, yine de bir seçenektir.
Önemli
yöntemini geçersiz kılarsanızOnTurnAsync, diğer On<activity>Async tüm işleyicileri çağırmak veya bu işleyicileri kendiniz çağırmak için temel uygulamayı almak için çağrısı yapmanız gerekirbase.OnTurnAsync. Aksi takdirde, bu işleyiciler çağrılmaz ve bu kod çalıştırılamaz.
Ana bot mantığı bot kodunda tanımlanır. Bir botu etkinlik işleyicisi olarak uygulamak için genişletin ActivityHandler. ActivityHandlerfarklı etkinlik türleri için çeşitli olayları tanımlar ve ve onConversationUpdategibi onMessage olay dinleyicilerini kaydederek botunuzun davranışını değiştirebilirsiniz.
Her olay türü için dinleyicileri kaydetmek için şu yöntemleri kullanın:
Etkinlik
Kayıt yöntemi
Açıklama
Alınan herhangi bir etkinlik türü
onTurn
Herhangi bir etkinlik alındığında dinleyiciyi kaydeder.
Herhangi event bir etkinlik alındığında dinleyiciyi kaydeder.
Alınan belirteç yanıtı olay etkinliği
onTokenResponseEvent
Bir olay alındığında tokens/response dinleyiciyi kaydeder.
Yükleme güncelleştirme etkinliği alındı
onInstallationUpdate
Herhangi installationUpdate bir etkinlik alındığında dinleyiciyi kaydeder.
Bot yüklendi
onInstallationUpdateAdd
Botun bir kuruluş birimi içinde ne zaman yüklendiğine ilişkin bir dinleyici kaydeder.
Bot kaldırıldı
onInstallationUpdateRemove
Bir kuruluş birimi içinde bot kaldırıldığında dinleyici kaydeder.
Alınan diğer etkinlik türü
onUnrecognizedActivityType
Belirli bir etkinlik türü için işleyici tanımlanmadığında dinleyiciyi kaydeder.
Etkinlik işleyicileri tamamlandı
onDialog
Geçerli işleyiciler tamamlandıktan sonra çağrılır.
İşlemenin next devam etmesi için her işleyiciden continuation işlevini çağırın. Çağrılmazsa next etkinliğin işlenmesi sona erer.
Ana bot mantığı bot kodunda tanımlanır. Bir botu etkinlik işleyicisi olarak uygulamak için, arabirimini uygulayan bot sınıfınızı öğesinden ActivityHandlertüretin Bot . ActivityHandler, ve onMembersAddedgibi onMessageActivityfarklı etkinlik türleri için çeşitli işleyicileri tanımlar. Bu yöntemler korunur, ancak 'den ActivityHandlertürediğimiz için geçersiz kılınabilir.
içinde ActivityHandler tanımlanan işleyiciler şunlardır:
Etkinlik
İşleyici
Açıklama
Alınan herhangi bir etkinlik türü
onTurn
Alınan etkinliğin türüne göre diğer işleyicilerden birini çağırır.
İleti etkinliği alındı
onMessageActivity
Bir message etkinliği işlemek için bunu geçersiz kılın.
Alınan konuşma güncelleştirme etkinliği
onConversationUpdateActivity
Bir conversationUpdate etkinlikte, bot dışındaki üyeler konuşmaya katıldıysa veya konuşmayı bıraktıysa işleyiciyi çağırır.
Bot olmayan üyeler konuşmaya katıldı
onMembersAdded
Konuşmaya katılan üyeleri işlemek için bunu geçersiz kılın.
Bot olmayan üyeler konuşmadan ayrıldı
onMembersRemoved
Konuşmadan ayrılan üyeleri işlemek için bunu geçersiz kılın.
Olay etkinliği alındı
onEventActivity
Bir event etkinlikte, olay türüne özgü bir işleyici çağırır.
Alınan belirteç yanıtı olay etkinliği
onTokenResponseEvent
Belirteç yanıt olaylarını işlemek için bunu geçersiz kılın.
Belirteç dışı yanıt olay etkinliği alındı
onEvent
Diğer olay türlerini işlemek için bunu geçersiz kılın.
Alınan ileti tepki etkinliği
onMessageReactionActivity
Bir messageReaction etkinlikte, bir iletiye bir veya daha fazla tepki eklendiğinde veya bir iletiden kaldırıldığında işleyiciyi çağırır.
İletiye eklenen ileti tepkileri
onReactionsAdded
İletiye eklenen tepkileri işlemek için bunu geçersiz kılın.
İletiden kaldırılan ileti tepkileri
onReactionsRemoved
İletiden kaldırılan tepkileri işlemek için bunu geçersiz kılın.
Yükleme güncelleştirme etkinliği alındı
onInstallationUpdate
Bir installationUpdate etkinlikte, bot yüklenip yüklenmediğine veya kaldırıldığına bağlı olarak bir işleyici çağırır.
Bot yüklendi
onInstallationUpdateAdd
Botun bir kuruluş birimine ne zaman yüklendiğine ilişkin mantık eklemek için bunu geçersiz kılın.
Bot kaldırıldı
onInstallationUpdateRemove
Botun bir kuruluş birimi içinde kaldırıldığında mantığı eklemek için bunu geçersiz kılın.
Alınan diğer etkinlik türü
onUnrecognizedActivityType
Aksi takdirde işlenmeyen herhangi bir etkinlik türünü işlemek için bunu geçersiz kılın.
Bu farklı işleyiciler, gelen HTTP isteğine karşılık gelen etkinlik hakkında bilgi sağlayan bir turnContext öğesine sahiptir. Etkinlikler çeşitli türlerde olabilir, bu nedenle her işleyici kendi dönüş bağlam parametresinde kesin olarak türlenmiş bir etkinlik sağlar; çoğu durumda, onMessageActivity her zaman işlenir ve genellikle en yaygın olanıdır.
Genel yöntemini onTurnuygulama seçeneği de vardır. Şu anda, bu yöntemin temel uygulaması hata denetimini işler ve sonra gelen etkinliğin türüne bağlı olarak belirli işleyicilerin her birini (bu örnekte tanımladığımız ikisi gibi) çağırır. Çoğu durumda, bu yöntemi yalnız bırakabilir ve tek tek işleyicileri kullanabilirsiniz, ancak durumunuz için özel bir uygulama onTurngerekiyorsa, yine de bir seçenektir.
Önemli
yöntemini geçersiz kılarsanızonTurn, diğer on<activity> tüm işleyicileri çağırmak veya bu işleyicileri kendiniz çağırmak için temel uygulamayı almak için çağrısı yapmanız gerekirsuper.onTurn. Aksi takdirde, bu işleyiciler çağrılmaz ve bu kod çalıştırılamaz.
Ana bot mantığı bot kodunda tanımlanır. Bir botu etkinlik işleyicisi olarak uygulamak için, bot sınıfınızı öğesinden ActivityHandlertüreterek soyut Bot sınıftan türetilir. ActivityHandlerve on_members_addedgibi on_message_activity farklı etkinlik türleri için çeşitli işleyicileri tanımlar. Bu yöntemler korunur, ancak 'den ActivityHandlertürediğimiz için geçersiz kılınabilir.
içinde ActivityHandler tanımlanan işleyiciler şunlardır:
Etkinlik
İşleyici
Açıklama
Alınan herhangi bir etkinlik türü
on_turn
Alınan etkinliğin türüne göre diğer işleyicilerden birini çağırır.
İleti etkinliği alındı
on_message_activity
Bir message etkinliği işlemek için bunu geçersiz kılın.
Alınan konuşma güncelleştirme etkinliği
on_conversation_update_activity
Bir conversationUpdate etkinlikte, bot dışındaki üyeler konuşmaya katıldıysa veya konuşmayı bıraktıysa işleyiciyi çağırır.
Bot olmayan üyeler konuşmaya katıldı
on_members_added_activity
Konuşmaya katılan üyeleri işlemek için bunu geçersiz kılın.
Bot olmayan üyeler konuşmadan ayrıldı
on_members_removed_activity
Konuşmadan ayrılan üyeleri işlemek için bunu geçersiz kılın.
Olay etkinliği alındı
on_event_activity
Bir event etkinlikte, olay türüne özgü bir işleyici çağırır.
Alınan belirteç yanıtı olay etkinliği
on_token_response_event
Belirteç yanıt olaylarını işlemek için bunu geçersiz kılın.
Belirteç dışı yanıt olay etkinliği alındı
on_event_activity
Diğer olay türlerini işlemek için bunu geçersiz kılın.
Alınan ileti tepki etkinliği
on_message_reaction_activity
Bir messageReaction etkinlikte, bir iletiye bir veya daha fazla tepki eklendiğinde veya bir iletiden kaldırıldığında işleyiciyi çağırır.
İletiye eklenen ileti tepkileri
on_reactions_added
İletiye eklenen tepkileri işlemek için bunu geçersiz kılın.
İletiden kaldırılan ileti tepkileri
on_reactions_removed
İletiden kaldırılan tepkileri işlemek için bunu geçersiz kılın.
Yükleme güncelleştirme etkinliği alındı
on_installation_update
Bir installationUpdate etkinlikte, bot yüklenip yüklenmediğine veya kaldırıldığına bağlı olarak bir işleyici çağırır.
Bot yüklendi
on_installation_update_add
Botun bir kuruluş birimine ne zaman yüklendiğine ilişkin mantık eklemek için bunu geçersiz kılın.
Bot kaldırıldı
on_installation_update_remove
Botun bir kuruluş birimi içinde kaldırıldığında mantığı eklemek için bunu geçersiz kılın.
Alınan diğer etkinlik türü
on_unrecognized_activity_type
Aksi takdirde işlenmeyen herhangi bir etkinlik türünü işlemek için bunu geçersiz kılın.
Bu farklı işleyiciler, gelen HTTP isteğine karşılık gelen etkinlik hakkında bilgi sağlayan bir turn_context öğesine sahiptir. Etkinlikler çeşitli türlerde olabilir, bu nedenle her işleyici kendi dönüş bağlam parametresinde kesin olarak türlenmiş bir etkinlik sağlar; çoğu durumda, on_message_activity her zaman işlenir ve genellikle en yaygın olanıdır.
Bu çerçevenin önceki 4.x sürümlerinde olduğu gibi genel yöntemini on_turnuygulama seçeneği de vardır. Şu anda, bu yöntemin temel uygulaması hata denetimini işler ve sonra gelen etkinliğin türüne bağlı olarak belirli işleyicilerin her birini (bu örnekte tanımladığımız ikisi gibi) çağırır. Çoğu durumda, bu yöntemi yalnız bırakabilir ve tek tek işleyicileri kullanabilirsiniz, ancak durumunuz için özel bir uygulama on_turngerekiyorsa, yine de bir seçenektir.
Önemli
yöntemini geçersiz kılarsanızon_turn, diğer on_<activity> tüm işleyicileri çağırmak veya bu işleyicileri kendiniz çağırmak için temel uygulamayı almak için çağrısı yapmanız gerekirsuper().on_turn. Aksi takdirde, bu işleyiciler çağrılmaz ve bu kod çalıştırılamaz.
Örnek etkinlik işleyicisi
Örneğin, kullanıcıları konuşmaya davet etmek için eklenen üyeleri işleyebilir ve bota gönderdikleri iletileri yankılamak için ileti üzerinde işlem yapabilirsiniz.
public class EchoBot : ActivityHandler
{
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
var replyText = $"Echo: {turnContext.Activity.Text}";
await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
}
protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
var welcomeText = "Hello and welcome!";
foreach (var member in membersAdded)
{
if (member.Id != turnContext.Activity.Recipient.Id)
{
await turnContext.SendActivityAsync(MessageFactory.Text(welcomeText, welcomeText), cancellationToken);
}
}
}
}
class EchoBot extends ActivityHandler {
constructor() {
super();
// See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types.
this.onMessage(async (context, next) => {
const replyText = `Echo: ${ context.activity.text }`;
await context.sendActivity(MessageFactory.text(replyText, replyText));
// By calling next() you ensure that the next BotHandler is run.
await next();
});
this.onMembersAdded(async (context, next) => {
const membersAdded = context.activity.membersAdded;
const welcomeText = 'Hello and welcome!';
for (let cnt = 0; cnt < membersAdded.length; ++cnt) {
if (membersAdded[cnt].id !== context.activity.recipient.id) {
await context.sendActivity(MessageFactory.text(welcomeText, welcomeText));
}
}
// By calling next() you ensure that the next BotHandler is run.
await next();
});
}
}
class EchoBot(ActivityHandler):
async def on_members_added_activity(
self, members_added: [ChannelAccount], turn_context: TurnContext
):
for member in members_added:
if member.id != turn_context.activity.recipient.id:
await turn_context.send_activity("Hello and welcome!")
async def on_message_activity(self, turn_context: TurnContext):
return await turn_context.send_activity(
MessageFactory.text(f"Echo: {turn_context.activity.text}")
)
Sonraki adımlar
Microsoft Teams kanalı, botunuzun Teams ile düzgün çalışması için desteklemesi gereken Teams'e özgü bazı etkinlikleri tanıtır. Microsoft Teams için bot geliştirmenin temel kavramlarını anlamak için bkz . Microsoft Teams botları nasıl çalışır?
Etkinlik işleyicisi, konuşma durumunu sırayla izlemesi gerekmeyen bir bot tasarlamanın iyi bir yoludur. İletişim kutuları kitaplığı , kullanıcıyla uzun süre çalışan bir konuşmayı yönetmenin yollarını sağlar.