openemail.events
كل دالّة في مساحة الأسماء هذه: توقيعها ومعلماتها وما تُرجعه ومثال عليها.
الدوالّ
Things your contacts did, sent by your own code, such as an order placed or a trial started. An event starts the automations whose trigger names it and ends the waits that were holding out for it.
events.send()
Record that something happened to a contact
send(body: ContactEventSend, options?: SendScope): Promise<ContactEventResultResource>Records an event against one contact, named by email or contactId: an order placed, a trial started, a plan changed. Every live automation whose trigger is this event name, and whose filters match properties, takes the contact in, and any wait step holding out for the name moves on. enrolled and resumed in the answer say what it set off. Events are kept for 90 days.
Every call carries an Idempotency-Key. The SDK generates one per call and reuses it on that call's retries, so a retried network failure returns the stored event instead of recording a second one. Pass options.idempotencyKey to extend that across processes and restarts. A replay resolves with replayed: true and starts nothing again. The same key with a different event is a 422 idempotency_key_reuse.
An event sent with a test key is stored with mode test and starts or resumes nothing.
المعلمات
body.namestringمطلوبWhat happened, such as
order.placed: 1 to 100 letters, digits, dots, colons, dashes and underscores, starting with a letter or a digit. Names are matched exactly, case included.body.emailstringThe contact the event is about, by email address. Send this or
contactId.body.contactIdstringThe contact the event is about, by id. Send this or
email.body.propertiesRecord<string, unknown>Anything worth keeping about the event, as an object of at most 50 keys and 4 KB of JSON. An event trigger can filter on these, and steps can put them in an email or a contact field.
body.occurredAtDate | stringWhen it happened, as a
Dateor an ISO 8601 string. Left out, it is now. It cannot be in the future or more than 90 days ago.body.createContactbooleanAdd the address to the contacts when nobody has it yet. It needs
email. Left out or false, an unknown address is a 404contact_not_found.body.contactNamestringThe name to give a contact that
createContactadds, at most 200 characters.options.idempotencyKeystringYour own key, 1 to 255 characters of letters, digits,
_,.,:or-. Anything else is a 400invalid_idempotency_key.options.signalAbortSignalCancels the request. An aborted call may still have been recorded, so retry with the same
idempotencyKey.options.apiKeystringOverrides the client's API key for this call only.
يُرجع
ContactEventResultResource: the event, with id, contactId, email, name, properties, occurredAt, mode and createdAt, plus replayed, enrolled, the ids of the automations it put the contact into, and resumed, how many waits it ended.
مثال
const event = await openemail.events.send({ name: 'order.placed', email: '[email protected]', properties: { orderId: 'AC-4192', total: 129 }, createContact: true}, { idempotencyKey: 'order:AC-4192:placed'}) console.log(event.id, event.enrolled, event.resumed, event.replayed)ملاحظات
A name, properties or an
occurredAtthat break a rule, or a body that names no contact, is 422invalid_eventwithparamnaming the field.A key or an app may send 600 events a minute. Past that the call is 429
event_rate_limited.An app a member connected reaches only the contacts that member added, and a contact it creates belongs to that member.
Retried automatically on network failure and retryable statuses, because the idempotency key makes a retry safe.
متاح أيضًا في
events.sendBatch()
Record up to 100 contact events in one call
sendBatch(events: Array<ContactEventSend>, options?: SendScope): Promise<ContactEventBatchResource>Records each event in order, as if events.send had been called for it, and reports per event. It is never all or nothing: accepted holds the events that were stored and failed the ones that were not, each with the index it had in the array, so one unknown address does not stop the rest. The promise resolves whenever the batch was processed, so check failed instead of relying on a throw.
The batch shares one Idempotency-Key, generated once per call or supplied as options.idempotencyKey, and the server remembers each event under the key and its position. Retrying the same array replays the events that were already stored and records only the ones that were not. Reordering the array between attempts makes an event that moved fail with idempotency_key_reuse.
المعلمات
eventsArray<ContactEventSend>مطلوبThe events, 1 to 100 of them, each in the shape
events.sendtakes:name,emailorcontactId, and optionallyproperties,occurredAt,createContactandcontactName.options.idempotencyKeystringYour own key for the whole batch, 1 to 255 characters of letters, digits,
_,.,:or-.options.signalAbortSignalCancels the request. An aborted batch may have been recorded in part, so retry the same array with the same
idempotencyKey.options.apiKeystringOverrides the client's API key for this call only.
يُرجع
ContactEventBatchResource with accepted, each a ContactEventResultResource plus its index, and failed, each with index, code and message.
مثال
const batch = await openemail.events.sendBatch([ { name: 'trial.started', email: '[email protected]' }, { name: 'trial.started', email: '[email protected]', properties: { plan: 'team' } }], { idempotencyKey: 'trials:2026-10-11'}) for (const failure of batch.failed) console.error(failure.index, failure.code, failure.message) console.log(batch.accepted.length)ملاحظات
A body of the wrong shape, an empty array or more than 100 events is refused whole with 422
invalid_parameter, andparamnames the event and the field, such asevents.3.name.The batch counts as that many events toward the 600 a minute a key or an app may send. A batch that would pass it is 429
event_rate_limitedand nothing is stored.A failed event carries the code the single call would answer:
invalid_event,contact_not_foundoridempotency_key_reuse.Retried automatically on network failure and retryable statuses, because the idempotency key makes a retry safe.
متاح أيضًا في
events.listNames()
List the event names the workspace has seen
listNames(options?: RequestScope): Promise<Array<ContactEventNameResource>>Returns the distinct names of the events the workspace holds, in byte order, at most 100. It is what the app suggests when somebody picks the event that starts an automation. Events are kept for 90 days, so a name nothing has sent in that time is gone. The list is not paginated.
المعلمات
options.signalAbortSignalCancels the request.
options.apiKeystringOverrides the client's API key for this call only.
يُرجع
Array<ContactEventNameResource>, each with name.
مثال
const names = await openemail.events.listNames() console.log(names.map((entry) => entry.name))ملاحظات
It needs
automations:read, not a contacts scope, because it serves the automation builder.Read only, so the SDK retries it after a network failure like any other read.