Skip to main content

First Message

Configure the initial message that greets users when they start a voice conversation.

Static First Message

Set a fixed greeting message with firstMessage option:

new MicdropServer(socket, {
firstMessage: 'Hello! How can I help you today?',
agent,
stt,
tts,
})

Dynamic First Message Generation

Use generateFirstMessage: true to let the AI agent create personalized greetings with systemPrompt:

new MicdropServer(socket, {
generateFirstMessage: true, // Agent will generate the first message
agent: new OpenaiAgent({
apiKey: process.env.OPENAI_API_KEY,
systemPrompt:
'You are a helpful assistant. Start with a warm, personalized greeting.',
}),
stt,
tts,
})

Let the user speak first

Don't set a first message to let the user speak first:

new MicdropServer(socket, {
agent,
stt,
tts,
})

Wake word

If you want the assistant to speak only after the user has spoken specific word(s), you can use the onBeforeAnswer hook in your agent configuration.

const WAKE_WORD = /Hello|Bonjour/
const FIRST_MESSAGE = 'Hello! How can I help you today?'

new OpenaiAgent({
apiKey: process.env.OPENAI_API_KEY,
systemPrompt: 'You are a helpful assistant.',
onBeforeAnswer(stream) {
// Process only first message
const isFirstAnswer = !this.conversation.some(
(message) => message.role === 'assistant'
)
if (!isFirstAnswer) return

// Get last user message
const lastUserMessage = this.conversation.findLast(
(message) => message.role === 'user'
) as MicdropConversationMessage
if (!lastUserMessage) return

// Check for wake word(s)
if (!WAKE_WORD.test(lastUserMessage.content)) {
// Remove message without answering
this.cancelLastUserMessage()
// Skip normal answer generation
return true
}

// Send first assistant message
this.addAssistantMessage(FIRST_MESSAGE)
stream.write(FIRST_MESSAGE)
// Skip normal answer generation
return true
},
})